gpt4 book ai didi

Python - 无法调用系统命令

转载 作者:太空宇宙 更新时间:2023-11-03 15:19:30 24 4
gpt4 key购买 nike

我有一些 python 代码,我想从中调用另一个程序。这个程序将

  • 打印一些输出到STDOUT
  • 写一个文件到磁盘

使用 call 我得到以下行为;

from subprocess import call
call(['./tango_x86_64_release', 'VTS1 ct="N" nt="N" ph="7.2" te="303" io="0.02" seq="MKHPYEEFPTGSKSPYNMSRGAHPGAV"'])
34, File not properly written, try writing it up again,
1

无论参数是否拆分为列表,都会发生这种情况;

call(['./tango_x86_64_release', 'VTS1', 'ct="N"', 'nt="N"', 'ph="7.2"', 'te="303"', 'io="0.02"', 'seq="MKHPYEEFPTGSKSPYNMSRGAHPGAV"'])
34, File not properly written, try writing it up again,
1

我可以从我的终端调用同样的命令

./tango_x86_64_release VTS1 ct="N" nt="N" ph="7.2" te="303" io="0.02" seq="MKHPYEEFPTGSKSPYNMSRGAHPGAV"

这有效并给出了 0 的退出状态。

似乎是写入磁盘导致了问题,如果我中断命令然后我会收到相应的警告消息(即删除一个参数,它会警告我该参数丢失)。

使用 subprocess.Popen() 给出一个 OSError

import subprocess as sub
output = sub.Popen('./tango_x86_64_release VTS1 ct="N" nt="N" ph="7.2" te="303" io="0.02" seq="MKHPYEEFPTGSKSPYNMSRGAHPGAV"', stdout=sub.PIPE, stderr=sub.PIPE)

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib64/python2.7/subprocess.py", line 679, in __init__
errread, errwrite)
File "/usr/lib64/python2.7/subprocess.py", line 1249, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory

非常感谢任何帮助

最佳答案

使用shlex.split 为您拆分命令:

import shlex
call(shlex.split('./tango_x86_64_release VTS1 ct="N" nt="N" ph="7.2" te="303" io="0.02" seq="MKHPYEEFPTGSKSPYNMSRGAHPGAV"'))

请注意,虽然您可以通过添加 shell=True 来解决您的问题,但您应该尽可能避免使用它,因为它可能是 security risk。 (搜索“shell 注入(inject)”)。

关于Python - 无法调用系统命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17372365/

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