Python subprocess.Popen()没有运行命令

问题描述 投票:0回答:4

我正在尝试使用subprocess.Popen()在我的脚本中运行命令。代码是:

output = Popen(["hrun DAR_MeasLogDump " + log_file_name], stdout=subprocess.PIPE, stderr = subprocess.PIPE, executable="/bin/csh", cwd=cwdir, encoding='utf-8')

当我打印输出时,它打印出创建的shell输出而不是列表中的实际命令。我试图摆脱executable='/bin/csh',但随后Popen甚至不会跑。

我也尝试过使用subprocess.communicate(),但它也没用。我也会得到shell输出而不是实际的命令运行。

由于安全问题,我想完全避免使用shell=True

编辑:在许多不同的尝试中,“hrun”没有被重新认识。 “hrun”是一个正在调用的Pearl脚本,DAR_MeasLogDump是动作,log_file_name是脚本将其操作调用的文件。是否需要进行任何类型的设置或配置才能识别“hrun”?

python subprocess popen
4个回答
0
投票

尝试:

output = Popen(["-c", "hrun DAR_MeasLogDump " +log_file_name], stdout=subprocess.PIPE, stderr = subprocess.PIPE, executable="/bin/csh", cwd=cwdir, encoding='utf-8')

csh期待-c "full command here"。没有-c我认为它只是试图将其作为文件打开。


0
投票

在这里指定一个奇怪的shell和一个明确的cwd似乎完全不合适(假设cwdir被定义到当前目录)。

如果subprocess的第一个参数是一个列表,则不涉及shell。

result = subprocess.run(["hrun", "DAR_MeasLogDump", log_file_name],
    stdout=subprocess.PIPE, stderr = subprocess.PIPE,
    universal_newlines=True, check=True)
output = result.stdout

如果您需要在遗留版本的Python下运行,可以使用check_output而不是run

您通常希望避免使用Popen,除非您需要执行更高级别的包装函数无法执行的操作。


0
投票

您正在创建subprocess.Popen的实例但不执行它。

你应该试试:

p = Popen(["hrun", "DAR_MeasLogDump ", log_file_name], stdout=subprocess.PIPE, stderr = subprocess.PIPE, cwd=cwdir, encoding='utf-8')

out, err = p.communicate()  # This will get you output

如果你不使用shell=True,然后使用executable should not be required,Args应该作为序列传递。

请注意,如果您不使用Popen的高级功能,则文档建议使用subprocess.run

from subprocess import run

p = run(["hrun", "DAR_MeasLogDump ", log_file_name], capture_output=True, cwd=cwdir, encoding='utf-8')

out, err = p.communicate()  # This will get you output

0
投票

这适用于cat示例:

import subprocess

log_file_name='-123.txt'

output = subprocess.Popen(['cat', 'DAR_MeasLogDump' + log_file_name], 
                                stdout=subprocess.PIPE, 
                                stderr=subprocess.STDOUT)
stdout, stderr = output.communicate()
print (stdout)
print (stderr)

我认为你只需要改变你的'hrun'命令

© www.soinside.com 2019 - 2024. All rights reserved.