gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 04:22:41 24 4
gpt4 key购买 nike

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

python trace.py

./trace.py

或从任何位置:

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

它工作正常并且跟踪路由被打印到终端。但是,当我尝试使用 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

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

最佳答案

子进程找不到 traceroute 可执行文件。

  1. 将 shell 中的 os.environ['PATH'] 与正在运行的 trace.py

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

关于Python脚本从终端执行,但在使用子进程时不执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33523919/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com