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()

輸出結果會一行一行的清晰分出來。

 

若是想把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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM