2016-08-29 4 views
1

Ich versuche Jahresfeld zu extrahieren von „Datum“ Ausgabe Code:Ausführung awk Python subprocess mit

import sys 
import os 
import subprocess 
per_name = input('Enter name:') 
age = input('Enter age:') 
to_date = subprocess.Popen(["date"],stdout=subprocess.PIPE) 
date = subprocess.Popen(['awk',"'{print","$NF}'"],stdin=to_date.stdout) 
act_date = date.communicate() 
to_date=str(act_date) 
print("Year: "+act_date) 

Ich erhalte folgende Fehlermeldung:

awk: syntax error at source line 1 
context is 
>>> ' <<< 
missing } 
awk: bailing out at source line 1 
Traceback (most recent call last): 
File "pyt_ex1.py", line 10, in <module> 
print("Year: "+act_date) 

Bitte mir mit richtigem Weg helfen es mit 'awk' zu extrahieren

Antwort

0

Warum versuchen Sie, awk für das zu verwenden? pythons str.split() teilt die Eingabe durch Leerzeichen auf und macht dasselbe wie awk.

year = date_string.split()[-1]

Sie können dann bekommen nur das letzte Element in der Liste. In der Tat brauchen Sie nicht einmal das Datum von Bash zu bekommen. Python hat Zeit- und Datumszeitmodule. Es würde wie folgt aussehen:

import datetime 
year = datetime.date.today().year 

Für den Fall, dass Sie awk verwenden wollen und nicht ein anderer Mechanismus dies funktionieren wird (man beachte die entfernten Anführungszeichen im zweiten Argument):

date = subprocess.Popen(["awk","{print $NF}"],stdin=to_date.stdout)

Getestet auf OSX und Fedora.

+0

Hey Jordan danke :). Aber wollen verstehen, warum 'awk' auch Fehler wirft, wie ich es ein anderes Mal verwenden könnte –

+0

@SuzannoHogwarts meine Antwort aktualisiert, um, wie dies mit awk zu tun – Jordan