Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python—写入stdin以便主程序可以从stdin读取的子进程_Python_Stdin - Fatal编程技术网

Python—写入stdin以便主程序可以从stdin读取的子进程

Python—写入stdin以便主程序可以从stdin读取的子进程,python,stdin,Python,Stdin,我有一个python程序,它从stdin获取输入。现在,我必须编写另一个程序并将其作为子进程调用,这样每当我启动这个子进程时,它都应该从另一个文本文件读取数据并将其写入stdin,然后我的主程序从stdin读取数据并使用它 out.py: in.py: 基本上,我这里的问题是.py中的读取整个文件并打印到我不想要的STDOUT中,它应该只传递一个字符。如果ad.txt类似: asdfgh 我应该得到“a”然后“s”然后“d”然后“f”。。等等。。每次调用函数read时,逐个字符读取文件中的下一

我有一个python程序,它从stdin获取输入。现在,我必须编写另一个程序并将其作为子进程调用,这样每当我启动这个子进程时,它都应该从另一个文本文件读取数据并将其写入stdin,然后我的主程序从stdin读取数据并使用它

out.py: in.py: 基本上,我这里的问题是.py中的
读取整个文件并打印到我不想要的STDOUT中,它应该只传递一个字符。如果
ad.txt
类似:

asdfgh

我应该得到
“a”
然后
“s”
然后
“d”
然后
“f”
。。等等。。每次调用函数read时,逐个字符读取文件中的下一个字符。就是这样!呸!!请帮帮我,我有一大堆工作要做!提前感谢:D

第一个程序应该从文件中读取(或
stdin
)并写入
stdout
(而不是
stdin
)。同样,第二个程序应该从
stdin
读取并写入
stdout
。现在,可以在命令行中使用管道符号将它们粘合在一起:

python first.py | python second.py
就这样!任何一个程序都不必知道另一个;这就是使用“管道”的美妙之处

附录:Shell管道在缓冲区上工作。shell侦听第一个程序并用其输出填充缓冲区。同时,只要有东西要读,第二个程序就会从缓冲区中读取,否则它会等待。通信是同步的,只需要固定大小的内存

示例代码:

# first.py
import sys
for line in open("input.txt"):
    processed_line = process_line(line)
    sys.stdout.write(processed_line)

# second.py
import sys
for line in sys.stdin:
    processed_line = process_line(line)
    sys.stdout.write(processed_line)

这些示例适用于多行(如果使用文本文件,效果更好)。您可以轻松地逐字节执行相同的操作。

为什么不让一个程序完成所有工作?您仍然可以将其拆分为多个文件。你知道Python中的模块是如何工作的,是吗?告诉我们你到目前为止都做了些什么。@KarlKnechtel:我正在写一个VM,所以我不应该这么做。。我的意思是,VM规范就像我上面说的那样,它应该使用另一个程序来完成它!您不能写入
stdin
。为什么不用呢?那很有用!但是请查看我的编辑。。我添加了代码。。如果你的建议有任何变化,请告诉我!!请谢谢没问题!我更新了答案。正如我在回答中所解释的,您不需要在Python代码中创建子流程。让他们像往常一样读标准输入法,写标准输出法。剩下的就靠炮弹了。就像枪声一样简单,伙计!有点期待去一点技术,但是的,这对我来说已经足够好了!!再次感谢!!
python first.py | python second.py
# first.py
import sys
for line in open("input.txt"):
    processed_line = process_line(line)
    sys.stdout.write(processed_line)

# second.py
import sys
for line in sys.stdin:
    processed_line = process_line(line)
    sys.stdout.write(processed_line)