我正在尝试使用python确定在命令行中执行某个东西的最佳方式。我已经在单个文件上使用subprocess.Popen()完成了这一点。然而,我正在尝试使用大量不同的文件多次确定执行此操作的最佳方式。我不确定是否应该创建一个批处理文件,然后在命令中执行该文件。或者我只是在我的代码中遗漏了一些东西。新手在这里,所以我提前道歉。下面的脚本返回一个returncode 1当我使用一个循环,但一个0当不在一个循环。什么是最好的方法来处理手头的任务?
def check_output(command, console):
if console == True:
process = subprocess.Popen(command)
else:
process = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, universal_newlines=True)
output, error = process.communicate()
returncode = process.poll()
return returncode, output, error
for file in fileList.split(";"):
...code to create command string...
returncode, output, error = check_output(command, False)
if returncode != 0:
print("Process failed")
sys.exit()
EDIT:示例命令字符串如下所示:
C:\路径\到\可执行文件. exe-i C:\路径\到\输入. ext-o C:\路径\到\输出. ext
4条答案
按热度按时间djmepvbi1#
尝试使用commands模块(仅在python 3之前可用)
代码可能如下所示
你并不完全清楚你要解决的问题。如果我必须猜测为什么你的命令在循环中失败,那可能是你处理控制台=假的方式。
ttygqcqt2#
如果您只是一个接一个地运行命令,那么最简单的方法可能是抛开Python,将您的命令添加到bash脚本中。我假设您只是想检查错误,如果其中一个命令失败就中止。
更新:OP用示例数据更新了他的问题,表明他使用的是Windows。你可以通过cygwin或其他各种软件包获得
bash
for Windows,但如果你使用的是Windows,使用PowerShell可能会更有意义。不幸的是,我没有Windows框,但应该有类似的错误检查机制。下面是一个reference for PowerShell错误处理。6l7fqoea3#
您可以考虑使用subprocess.call
它还将输出0表示成功,输出1表示失败。
r7knjye24#
你的代码试图完成的是在一个文件上运行一个命令,并在出现错误时退出脚本。
subprocess.check_output
完成了这一点--如果子进程退出并返回一个错误代码,它会引发一个Python错误。根据你是否想显式处理错误,你的代码看起来像这样:它将执行命令并打印shell错误消息(如果有),或者
它将打印shell错误代码并退出,就像在您的脚本中一样。