python使用subprocess

subprocess

在Python中躯嫉,提供了subprocess模塊燎含,通過這個模塊中的相應(yīng)API售睹,
就可以開啟一個子進(jìn)程來執(zhí)行相應(yīng)的腳本來完成這個操作。 
可以通過subprocess中的Popen類來處理這個命令炒瘸。
即允許你去創(chuàng)建一個新的進(jìn)程讓其執(zhí)行另外的程序,
并與它進(jìn)行通信寝衫,獲取標(biāo)準(zhǔn)的輸入顷扩、標(biāo)準(zhǔn)輸出、標(biāo)準(zhǔn)錯誤以及返回碼等慰毅。

popen類

subprocess模塊定義了一個Popen類隘截,通過它可以創(chuàng)建進(jìn)程,并與其進(jìn)行復(fù)雜的交互。

__init__(self, args, bufsize=0, executable=None, 
stdin=None, stdout=None, stderr=None, preexec_fn=None, 
close_fds=False, shell=False, cwd=None, env=None, 
universal_newlines=False, startupinfo=None, 
creationflags=0)

下面是參數(shù)的意思:

參數(shù) 作用
args 一般是一個字符串技俐,是要執(zhí)行的shell命令內(nèi)容
bufsize 設(shè)置緩沖乘陪,負(fù)數(shù)表示系統(tǒng)默認(rèn)緩沖,0表示無緩沖雕擂,正數(shù)表示自定義緩沖行數(shù)
stdin 程序的標(biāo)準(zhǔn)輸入句柄啡邑,NONE表示不進(jìn)行重定向,繼承父進(jìn)程井赌,PIPE表示創(chuàng)建管道
stdout 程序的標(biāo)準(zhǔn)輸出句柄谤逼,參數(shù)意義同上
stderr 程序的標(biāo)準(zhǔn)錯誤句柄,參數(shù)意義同上仇穗,特殊流部,可以設(shè)置成STDOUT,表示與標(biāo)準(zhǔn)輸出一致
shell 為True時纹坐,表示將通過shell來執(zhí)行
cwd 用來設(shè)置當(dāng)前子進(jìn)程的目錄
env 設(shè)置環(huán)境變量枝冀,為NONE表示繼承自父進(jìn)程的
universal_newlines 將此參數(shù)設(shè)置為True,Python統(tǒng)一把這些換行符當(dāng)作’/n’來處理耘子。

進(jìn)程通信實(shí)例
在shell=True這個參數(shù)果漾,不寫的時候默認(rèn)是False,shell默認(rèn)為/bin/sh谷誓。如果 args是一個字符串绒障,則該字符串指定要通過shell執(zhí)行的命令。這意味著字符串的格式必須與在shell提示符下鍵入時完全相同捍歪。這包括户辱,例如,引用或反斜杠轉(zhuǎn)義帶有空格的文件名糙臼。如果args是一個序列庐镐,則第一個項(xiàng)指定命令字符串,任何其他項(xiàng)將被視為shell本身的附加參數(shù)弓摘。也就是說焚鹊,Popen相當(dāng)于:

Popen(['/bin/sh', '-c', args[0], args[1], ...])

解決方法就是,當(dāng)需要設(shè)置shell=True時(當(dāng)False時韧献,arges是列表末患,第一個參數(shù)是shell命令,后面的都是參數(shù)',' 隔開)锤窑,須把a(bǔ)rgs設(shè)為string璧针,空格隔開,如下:

# -*- coding: utf-8 -*-
import subprocess

# output = subprocess.Popen(["python", "/home/python/Desktop/z/my_subprocess/my_add.py"],
#                           stdout=subprocess.PIPE, stderr=subprocess.PIPE)

output = subprocess.Popen("python /home/python/Desktop/z/my_subprocess/my_add.py",
                          stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)

output2 = subprocess.Popen("python /home/python/Desktop/z/my_subprocess/my_input.py",
                           stdin=output.stdout, stdout=subprocess.PIPE, shell=True)
output.stdout.close()
print 'output2:', output2
# print output2.stdout.read() # 會出現(xiàn)死鎖
oc = output2.communicate()
print 'oc:', oc[0]

my_add.py

output的stdout只能輸出在終端上的參數(shù)渊啰,如print探橱,return不行

# def my_add():
#     a = 5
#     b = 6
#     res = a+b
#     return res

a = 5
b = 6
res = a+b
print res

my_input.py

把my_add.py的輸出stdout放入my_input.py里當(dāng)輸入?yún)?shù)stdin

a = input()

c = a * a

print c

communicate()會避免由于輸出參數(shù)過多造成死鎖申屹。返回的是一個tuple,(stdout,stderr)隧膏。
輸出結(jié)果如下:


image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末哗讥,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子胞枕,更是在濱河造成了極大的恐慌杆煞,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,525評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件腐泻,死亡現(xiàn)場離奇詭異决乎,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)派桩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評論 3 395
  • 文/潘曉璐 我一進(jìn)店門构诚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人铆惑,你說我怎么就攤上這事范嘱。” “怎么了鸭津?”我有些...
    開封第一講書人閱讀 164,862評論 0 354
  • 文/不壞的土叔 我叫張陵彤侍,是天一觀的道長。 經(jīng)常有香客問我逆趋,道長,這世上最難降的妖魔是什么晒奕? 我笑而不...
    開封第一講書人閱讀 58,728評論 1 294
  • 正文 為了忘掉前任闻书,我火速辦了婚禮,結(jié)果婚禮上脑慧,老公的妹妹穿的比我還像新娘魄眉。我一直安慰自己,他們只是感情好闷袒,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,743評論 6 392
  • 文/花漫 我一把揭開白布坑律。 她就那樣靜靜地躺著,像睡著了一般囊骤。 火紅的嫁衣襯著肌膚如雪晃择。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,590評論 1 305
  • 那天也物,我揣著相機(jī)與錄音宫屠,去河邊找鬼。 笑死滑蚯,一個胖子當(dāng)著我的面吹牛浪蹂,可吹牛的內(nèi)容都是我干的抵栈。 我是一名探鬼主播,決...
    沈念sama閱讀 40,330評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼坤次,長吁一口氣:“原來是場噩夢啊……” “哼古劲!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起缰猴,我...
    開封第一講書人閱讀 39,244評論 0 276
  • 序言:老撾萬榮一對情侶失蹤产艾,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后洛波,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體胰舆,經(jīng)...
    沈念sama閱讀 45,693評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,885評論 3 336
  • 正文 我和宋清朗相戀三年蹬挤,在試婚紗的時候發(fā)現(xiàn)自己被綠了缚窿。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,001評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡焰扳,死狀恐怖倦零,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情吨悍,我是刑警寧澤扫茅,帶...
    沈念sama閱讀 35,723評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站育瓜,受9級特大地震影響葫隙,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜躏仇,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,343評論 3 330
  • 文/蒙蒙 一恋脚、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧焰手,春花似錦糟描、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至躲履,卻和暖如春见间,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背崇呵。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評論 1 270
  • 我被黑心中介騙來泰國打工缤剧, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人域慷。 一個月前我還...
    沈念sama閱讀 48,191評論 3 370
  • 正文 我出身青樓荒辕,卻偏偏與公主長得像汗销,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子抵窒,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,955評論 2 355

推薦閱讀更多精彩內(nèi)容