Python + 如何在Python中验证Linux命令是否成功执行

3

如何在Python脚本中捕获命令的标准输出

例如,我想检查tar命令是否成功执行,并将结果返回到stndStatus变量中。

import commands

def runCommandAndReturnValue():

      status,output = commands.getstatusoutput("  tar xvf Test.tar ")
      return stndStatus

另一个例子 - 就像shell脚本中的$?一样,stndStatus将是$?的值。


2
请查看 subprocess 模块 https://docs.python.org/2/library/subprocess.html - xrisk
你的代码没有意义,因为stndStatus在任何地方都没有定义。Linux命令通常在成功时返回0,否则返回一个对应于错误代码的8位有符号整数。其他错误代码没有标准定义,只有零表示成功。 - Two-Bit Alchemist
我认为这个模块不支持Python 2.X(这是我Linux上的版本)。 - user1121951
@Eytan 我正在使用2.7版本,它运行得非常好。 - xrisk
@Eytan 这些是Python 2文档,页面顶部就写着“Python 2.4中的新功能”。 - Two-Bit Alchemist
stndStatus只是一个示例,用于返回标准输出,但我需要真实的示例。 - user1121951
2个回答

2
我需要将输出重定向到DEVNULL
import subprocess
import os

FNULL = open(os.devnull, 'w')
retcode = subprocess.call(['tar', 'xvf', 'test.tar'],
                          stdout=FNULL,
                          stderr=subprocess.STDOUT)
print retcode

0

这里应该可以工作:

with open('output.txt','w') as f:
  retcode = subprocess.call('tar xvd Test.tar', stdout=f, stderr=f)

Retcode将拥有命令的返回值。如果成功,则为0,否则为其他值。命令的输出将进入文件中,稍后可以读取。


1
来自文档的@Eytan:“stdin,stdout和stderr分别指定执行程序的标准输入,标准输出和标准错误文件句柄。有效值为PIPE,现有文件描述符(正整数),现有文件对象和None。” - xrisk
好的,你能否更新一下你的回答,关于最后的评论,并在你的代码中包含该模块,以便所有用户都可以使用。 - user1121951
让我们在聊天中继续这个讨论 - user1121951
1
@Eytan 不用了,自己努力一下吧。 - xrisk
@Eytan,那是因为tar_没有输出_。尝试使用像ls这样的命令,你会看到输出! - xrisk
显示剩余6条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接