gpt4 book ai didi

python - 无法使用 subprocess.Popen 捕获 ls -la 的结果

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

当我使用 Popen 执行自定义命令时,我 try catch 输出:

import subprocess

def exec_command():
command = "ls -la" # will be replaced by my custom command
result = subprocess.Popen(command, stdout=subprocess.PIPE).communicate()[0]
print(result)

exec_command()

我收到一个带有以下堆栈跟踪的OSError:

 File "/usr/lib64/python2.7/subprocess.py", line 711, in __init__
errread, errwrite)
File "/usr/lib64/python2.7/subprocess.py", line 1327, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory

请让我知道我需要使用什么。

注意:堆栈跟踪显示代码是在 Python 2.7 中执行的,但我在使用 Python 2.6 运行时遇到了相同的错误

最佳答案

在没有 shell=True 的情况下运行时(您正在正确执行此操作;shell=True 很危险),您应该将命令作为命令序列传递,并且参数,而不是单个字符串。固定代码为:

def exec_command():
command = ["ls", "-la"] # list of command and argument
... rest of code unchanged ...

如果某些参数涉及用户输入,您只需将其插入列表:

def exec_command(somedirfromuser):
command = ["ls", "-la", somedirfromuser]

注意:如果您的命令足够简单,我建议完全避免 subprocessos.listdiros.stat (或在 Python 3.5+ 上,单独使用 os.scandir)可以获得与 相同的信息ls -la 以一种更易于编程使用的形式,无需解析它,并且可能比启动外部进程并通过管道与其进行通信更快。

关于python - 无法使用 subprocess.Popen 捕获 ls -la 的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42839647/

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