使用python编写2个python脚本

使用python编写2个python脚本,python,pipe,Python,Pipe,我有3个python文件:1个用于接受字符串,一个用于反转字符串,一个用于管道化字符串。我不熟悉这个概念,所以请帮助我如何实现这一点 1.py 2.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]$ 我可以使用子

我有3个python文件:1个用于接受字符串,一个用于反转字符串,一个用于管道化字符串。我不熟悉这个概念,所以请帮助我如何实现这一点

1.py

2.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]$ 

我可以使用
子流程
模块部分地使其工作。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])
烟斗-

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
变量中获得输出

然后我们调用,
python2.py
,同时将其输出重定向到主脚本的stdout,并将其stdin重定向到管道,然后使用
p2.communicate()
函数将
output
变量作为输入传递给它

结果是-

>> python pipe.py
Blah

 : gnirtS ruoY tupnI
halB
请注意,它部分工作,因为我们没有看到
1.py
中的提示。如果不需要这个提示,我们也可以这样做-

1.py

然后结果变成-

>> python pipe.py
I inputted something

gnihtemos dettupni I

问题是,除了1.py中的print语句外,没有任何标准输出,如果在1.py中使用
print main()
调用main(),然后通过管道将调用该脚本的进程的标准输出传递到另一个脚本,那么代码就可以工作,使用
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.2:

2.2:

或者使用shell=True和check_输出:

from subprocess import check_output

out = check_output("python 1.py | python 2.py",shell=True)

任何错误或回溯?执行pipe.py不会显示任何内容。终端挂起一段时间。您是否给出了一些值
raw_input()
将从用户自身获取输入。无值。刚刚执行了pipe.py和terminal hangs。您需要给出一些值。在上面键入,
foo
>> python pipe.py
I inputted something

gnihtemos dettupni I
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)
def main():
    return raw_input('Input Your String : ')


if __name__ == "__main__":
    print main()
import sys

if __name__=='__main__':
    for line in sys.stdin:
        sys.stdout.write(line[::-1])
from subprocess import check_output

out = check_output("python 1.py | python 2.py",shell=True)