[英]Piping 2 python scripts using python
我有3個python文件:1個用於接受字符串,一個用於反轉它,一個用於管道它們。 我對這個概念不熟悉,所以請幫助我如何實現這個目標。
1.py
def main():
print 'Input Your String : '
stri = raw_input()
return stri
main()
2.py
import sys
if __name__=='__main__':
for line in sys.stdin:
sys.stdout.write(line[::-1])
pipe.py
import os
os.system('python 1.py | python 2.py')
我想要實現的是使用另一個python文件將1.py的輸出提供給2.py。 謝謝 !
輸出:
$ python pipe.py
foo
: gnirtS ruoY tupnI[tecomp@localhost 3264]$
我部分能夠使用subprocess
模塊使其工作。 python文件是 -
1.py - 在這里,您應該打印它,而不是返回輸入。
def main():
print 'Input Your String : '
stri = input()
print stri
main()
2.py -
import sys
if __name__=='__main__':
for line in sys.stdin:
sys.stdout.write(line[::-1])
pipe.py -
import subprocess
import sys
p1 = subprocess.Popen(['python','1.py'] , stdout=subprocess.PIPE, stdin=sys.stdin)
output = p1.communicate()[0]
p2 = subprocess.Popen(['python','2.py'] , stdin=subprocess.PIPE, stdout=sys.stdout)
p2.communicate(output)[0]
在Pipe.py中,我們首先調用python 1.py
同時將stdin重定向到主腳本的stdin並將stdout重定向到PIPE,這樣我們就可以得到output
變量的輸出。
然后我們調用python 2.py
同時將其輸出重定向到主腳本的stdout並將其stdin重定向到PIPE,然后使用p2.communicate()
函數將output
變量作為輸入傳遞給它。
結果是 -
>> python pipe.py
Blah
: gnirtS ruoY tupnI
halB
請注意,它部分工作,因為我們沒有看到來自1.py
的提示。 如果沒有必要提示,我們也可以 -
1.py
def main():
stri = input()
print stri
main()
然后結果變成 -
>> python pipe.py
I inputted something
gnihtemos dettupni I
問題是除了1.py中的print語句之外沒有stdout,如果你在1.py中調用帶有print main()
然后管道調用該腳本的進程的stdout然后你的代碼將工作, pipe.py
作為以下管道輸出1.py到2.py:
from subprocess import PIPE, Popen, STDOUT
p = Popen(["python","1.py"], stdout=PIPE, stderr=STDOUT)
p.wait()
p2 = Popen(["python", "2.py"], stdin=p.stdout, stdout=PIPE, stderr=STDOUT)
p.stdout.close()
out, _ = p2.communicate()
print(out)
1.py:
def main():
return raw_input('Input Your String : ')
if __name__ == "__main__":
print main()
2.py:
import sys
if __name__=='__main__':
for line in sys.stdin:
sys.stdout.write(line[::-1])
或者使用帶有check_output的shell = True:
from subprocess import check_output
out = check_output("python 1.py | python 2.py",shell=True)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.