Python 脚本从终端执行,但在使用子进程时不执行?
Python script executes from terminal, but not when using subprocess?
我正在使用 subprocess
执行位于不同文件夹中名为 trace.py 的 Python 脚本。脚本 trace.py 然后使用 subprocess 到 运行 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_path
是 trace.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
为什么这行不通,但从终端执行却行?
child 找不到 traceroute
可执行文件。
比较 shell 中的 os.environ['PATH']
与运行中的值 trace.py
检查文件权限 -- 运行 trace.py
.
的用户是否可读和可执行
我正在使用 subprocess
执行位于不同文件夹中名为 trace.py 的 Python 脚本。脚本 trace.py 然后使用 subprocess 到 运行 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_path
是 trace.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
为什么这行不通,但从终端执行却行?
child 找不到 traceroute
可执行文件。
比较 shell 中的
os.environ['PATH']
与运行中的值trace.py
检查文件权限 -- 运行
trace.py
. 的用户是否可读和可执行