繁体   English   中英

从Python脚本运行shell命令

[英]Running shell command from Python script

我正在尝试从python脚本中运行一个shell命令,它需要做几件事
1. shell命令是'hspice tran.deck>! tran.lis'
2.在继续之前,脚本应该等待shell命令完成
3.我需要检查命令的返回码和
4.如果成功完成则捕获STDOUT,否则捕获STDERR

我经历了子进程模块并尝试了一些事情,但无法找到完成上述所有操作的方法。
- 使用subprocess.call()我可以检查返回代码但不捕获输出。
- 使用subprocess.check_output()我可以捕获输出而不是代码。
- 使用subprocess.Popen()和Popen.communicate(),我可以捕获STDOUT和STDERR,但不能捕获返回码。
我不知道如何使用Popen.wait()或returncode属性。 我也无法让Popen接受'>!' 或'|' 作为参数。

有人可以指点我正确的方向吗? 我正在使用Python 2.7.1

编辑:使用以下代码

process = subprocess.Popen('ls | tee out.txt', shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out, err = process.communicate()
if(process.returncode==0):
  print out
else:
  print err

另外,我应该在process = line之后使用process.wait()还是默认等待?

只需在.returncode .communicate()之后使用.returncode 另外,告诉Popen 你要运行的是shell命令 ,而不是原始命令行:

p = subprocess.Popen('ls | tee out.txt', shell=True, ...)
p.communicate()
print p.returncode

来自文档

Popen. returncode

子返回码,由poll()wait() (间接由communicate() )。 “无”值表示该进程尚未终止。

负值-N表示孩子被信号N终止(仅限Unix)。

以下是如何与shell交互的示例:

>>> process = subprocess.Popen(['/bin/bash'], shell=False, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
>>> process.stdin.write('echo it works!\n')
>>> process.stdout.readline()
'it works!\n'
>>> process.stdin.write('date\n')
>>> process.stdout.readline()
'wto, 13 mar 2012, 17:25:35 CET\n'
>>> 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM