subprocess.Popen()
新進小白
寫了一個python指令碼執行linux命令"df -h"
第一次:
#!/bin/python
import subprocess
def main():
p = subprocess.Popen('df-h',shell=True,stdout.PIPE,stderr=subprocess.STDOUT)
main()
執行完成後:
SyntaxError:non-keyword arg after keyword arg。Python中呼叫函式時,有時會報SyntaxError: non-keyword arg after keyword arg錯誤。
這通常是因為函式中定義了部分引數的預設值,Python中*arg表示任意多個無名引數,型別為tuple(元組),**kwargs表示關鍵字引數,為dict(字典),因此沒有預設值的引數,即*arg 要放在前面,**kwargs 要放在後面,出現這個錯誤後,可以在有預設值的引數前加上引數名即可
這裡是因為p = subprocess.Popen('df-h',shell=True,stdout.PIPE,stderr=subprocess.STDOUT)含有預設的函式數值,如stdout.PIPE,應修改成stdout=subprocess.PIPE
修改完成後:成功
但是我想把命令返回結果輸出到螢幕上:
第二次:
#!/bin/python
import subprocess
def main():
p = subprocess.Popen('df-h',shell=True,stdout.PIPE,stderr=subprocess.STDOUT)
print p
main()
執行結果:
<subprocess.Popen object at 0x7f33391b2a10>,這是因為subprocess.Popen返回值需要read出來
修改後:
#!/bin/python
import subprocess
def main():
p = subprocess.Popen('df-h',shell=True,stdout.PIPE,stderr=subprocess.STDOUT)
out = p.stdout.readlines()
print out
main()
輸出結果:沒有用分行,所有的字元堆積在一起。要想一行一行的列印,需要使用strip()函式
修改後:
#!/bin/python
import subprocess
def main():
p = subprocess.Popen('df-h',shell=True,stdout.PIPE,stderr=subprocess.STDOUT)
out = p.stdout.readlines()
for line in out :
print line.strip():
main()
輸出結果會一行一行的清晰分出來。
關於subprocess.Popen的使用可以具體的看以下連結:https://www.cnblogs.com/zhoug2020/p/5079407.html
關於strip()函式的使用可以看以下連結:http://www.runoob.com/python/att-string-strip.html