2016-07-22 2 views
0

Nach erhalten, ist der Code, den ich PythonWie sonst wenn Unix-Befehl von Python ausführen und ret Wert

from subprocess import Popen, PIPE 

cmd = 'if (-e "../a.txt") then \n ln -s ../a.txt . \n else \n echo "file is not present " \n endif' 

ret_val = subprocess.call(cmd,shell="True") 

Bei der Ausführung ergibt folgende Fehlermeldung In sh

/bin/sh: -c: line 5: syntax error: unexpected end of file 
+3

den Befehl Arbeit in der Shell tut? – user2393256

+2

Sie sollten "True" an "Shell" übergeben, nicht die Zeichenfolge "True". – DeepSpace

+3

Das ist hässlich ... es wird dringend empfohlen, stattdessen die Logik in den Python-Code zu schreiben. – wim

Antwort

6

auszuführen versuchen mit Skripte, if wird mit fi, nicht endif beendet.

http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_07_01.html


Oder nur das verflixte Code in Python schreiben:

import os 

if os.path.exists('../a.txt'): 
    print 'Exists' 
    os.symlink('../a.txt', 'a.txt') 
else: 
    print 'Does not exist' 

Wenn Sie wirklich Tcsh Befehle ausführen möchten, dann:

import shlex 
import subprocess 

args = ['tcsh', '-c'] + shlex.split(some_tcsh_command) 
ret = suprocess.call(args) 
+0

ich führe in tcsh Shell aus. wenn run-Befehl direkt in der Shell funktioniert es. aber wenn ich durch python-Skript ausführen, funktioniert es nicht. –

+0

Ja, das ist der Weg. Stören Sie nicht mit Python, wenn Sie mehr Shell-Cmd als Python haben: D – pwnsauce

+2

Nein, du bist nicht. Sehen Sie sich die Fehlermeldung an, die gedruckt wird. Es ist '/ bin/sh'. Die Shell, die * du * benutzt, bedeutet hier nichts. Wenn Sie 'shell = True 'übergeben, wird Subprocess angewiesen, es über'/bin/sh' auszuführen. –

Verwandte Themen