如何从python中的os.system中删除0表单?

时间:2016-05-14 17:22:42

标签: python python-2.7

我想知道如何在python中删除os.system中的0,例如,在这个变量中我可以删除它而没有任何问题:

user_name = check_output('whoami').strip()
output = current-user

但问题是当我运行这个变量时:

from subprocess import check_output

subtests = os.system('/home/' + user_name + '/tests/cfile --list-subtests')
output = subtests 1
         subtests 2
         0

如果我从第一个命令应用相同的命令结构,如

 subtests = check_output('/home/' + user_name + '/intel-graphics/intel-gpu-tools/tests/' + line + ' --list-subtests').strip()

它不起作用,我得到了几个python的错误,我正在研究很多,但到目前为止我找不到一个好的解决方案。

注意:我使用python 2.7

3 个答案:

答案 0 :(得分:1)

命令subprocess.check_output()返回一个字符串,其中包含进程的输出。因此,您可以应用字符串方法。 os.system()不返回字符串,而是返回状态,这是一个整数 - 你不能strip()整数。

您看到的“输出”是过程输出,它会直接转储到屏幕上。如果您想使用它,请使用check_output()。这就是它的用途。

答案 1 :(得分:1)

当您致电os.system时,它会启动一个新流程。该过程的标准输入和输出流连接到Python程序流。

即。当你调用os.system时,无论子进程输出被写入终端(或者你的主程序输出是什么)。就像这样:

>>> result = os.system(".../cfile --list-subtests")
subtests 1
subtests 2
>>> result
0

上面的“子测试1”/“子测试2”行只是从子进程传递到终端的文本。它从未被Python处理或转到任何变量。返回值仅为0,这通常意味着操作已成功完成。

如果您想使用the subprocess module捕获输出,请check_output(与您在第一个示例中使用的完全一样!)或通用Popen

>>> process = subprocess.Popen([".../cfile", "--list-subtests"], stdout=subprocess.PIPE)
>>> process_out, process_err = process.communicate()
>>> process_out
'subtests 1\nsubtests 2\n'
>>> process.returncode
0

答案 2 :(得分:0)

尝试

commands.getstatusoutput("your command") 

它返回一个元组。然后你可以使用你想要的任何输出