2015-11-04 80 views
0

我正在使用subprocess來執行名爲trace.py的Python腳本,它位於不同的文件夾中。腳本trace.py然後使用子進程運行traceroute命令,然後打印輸出。當我去到trace.py位於並在終端輸入這個文件夾:Python腳本從終端執行,但不是在使用子進程時執行?

python trace.py 

./trace.py 

或從任何位置:

python /home/.../cgi-bin/trace.py 

它工作正常並將traceroute打印到終端。但是,當我嘗試使用subprocess從main.py執行trace.py時,它似乎不起作用。我已經通過創建test.py並使用subprocess從main.py執行它並測試了這個方法。我這樣做有以下情況:

output = subprocess.check_output([sys.executable, script_path]) 

哪裏script_pathtrace.py絕對路徑。

完整的錯誤我得到的是這樣的(路徑縮短):

Traceback (most recent call last): 
    File "/home/.../cgi-bin/trace.py", line 11, in <module> 
traceroute = subprocess.check_output(["traceroute", "www.google.com"]) 
    File "/usr/lib/python2.7/subprocess.py", line 566, in check_output 
process = Popen(stdout=PIPE, *popenargs, **kwargs) 
    File "/usr/lib/python2.7/subprocess.py", line 710, in __init__ 
errread, errwrite) 
    File "/usr/lib/python2.7/subprocess.py", line 1327, in _execute_child 
raise child_exception 
OSError: [Errno 2] No such file or directory 
Traceback (most recent call last): 
    File "main.py", line 97, in <module> 
serve(args.port, public_html, cgibin) 
    File "main.py", line 55, in serve 
process = subprocess.check_output(["/usr/bin/python", script_path]) 
    File "/usr/lib/python2.7/subprocess.py", line 573, in check_output 
raise CalledProcessError(retcode, cmd, output=output) 
subprocess.CalledProcessError: Command '['/usr/bin/python', '/home/.../cgi-bin/trace.py']' returned non-zero exit status 1 

爲什麼這個不行的,但是從終端執行它呢?

+0

可以輸出'python trace.py --ip www.google.com; echo $?' – jepio

+1

退出狀態是'1'。終端不感興趣。試試'echo $?'看看它是'1'。 –

+0

@PeterWood退出狀態爲0. – Esoemah

回答

2

孩子找不到traceroute可執行文件。

  1. 與價值的殼比較os.environ['PATH']內捉迷藏trace.py

  2. 檢查文件的權限 - 無論是運行trace.py用戶讀取和執行。

+0

我不太確定你想要我做什麼?在終端的python shell中打印'os.environ [「PATH」]並將其打印到'trace.py'中打印出相同的結果。 – Esoemah

+0

@Esoemah:我已經更新了答案。如果文件權限也看起來不錯,那麼創建一個* minimal *代碼示例來演示您的問題並更新您的問題,例如'python -c'import subprocess,sys; subprocess.check_call([SYS。可執行文件「-c」,「」「import subprocess; subprocess.check_call([」mtr「,」www.google.com「])」「」])' ' – jfs

+0

我想通了,謝謝。正如你所說的那樣,PATH就是這麼簡單...... – Esoemah

相關問題