2015-11-04 83 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

相关问题