Python脚本从终端执行,但在使用子进程时却不行?

时间:2015-11-04 14:06:32

标签: python python-2.7 subprocess

我使用subprocess执行名为trace.py的Python脚本,该脚本位于不同的文件夹中。然后脚本trace.py使用子进程运行traceroute命令,然后打印输出。当我转到trace.py所在的文件夹并在终端中输入:

python trace.py

./trace.py

或从任何地点:

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

它工作正常,traceroute打印到终端。但是,当我尝试使用subprocess从main.py执行trace.py时,它似乎无法正常工作。我通过创建test.py并使用子进程从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

为什么这不起作用,但从终端执行呢?

1 个答案:

答案 0 :(得分:2)

孩子无法找到traceroute可执行文件。

  1. 将您的shell中的os.environ['PATH']与runnning trace.py

  2. 中的值进行比较
  3. 检查文件权限 - 运行trace.py的用户是否可读和可执行。