簡體   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