新進小白
寫了一個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()
輸出結果會一行一行的清晰分出來。
若是想把df -h結果輸出到一個文件:
第三次:
#!/bin/python
import subprocess
import os
def main():
p = subprocess.Popen('df-h',shell=True,stdout.PIPE,stderr=subprocess.STDOUT)
out = p.stdout.readlines()
for line in out :
data = line.strip()
file = open('test.txt','a+')
file.writelines(data+"\n") #加"+\n"是為了實現把文本里面的內容行行轉譯
file.close
main()
關於subprocess.Popen的使用可以具體的看以下鏈接:https://www.cnblogs.com/zhoug2020/p/5079407.html
關於strip()函數的使用可以看以下鏈接:http://www.runoob.com/python/att-string-strip.html
