我有一个包含整数的列表,并且希望将其引导至一个shell命令,该命令可以根据它创建直方图(请参阅here)。Python - 输入为输入到子进程的整数.Popen
现在,让我们通过一个简单的shell脚本echo_script.sh
呼应所有输入模拟天生柱状图生成脚本:
#/bin/sh
echo [email protected]
从内Python的,我想一个列表的内容直接到该命令。我想这涉及到一些与subprocess
摆弄。
numbers = [1, 2, 3]
# subprocess stuff, writing numbers to stdin of echo_script.sh process?
我想有以下输出到stdout:
1 2 3
注意,我知道,涉及到存储在一个临时文件和管道列表内容该文件将echo_script.sh
解决方案。我想避免这种情况。
编辑:我正在使用的histogram.py脚本不支持读取任意数量的附加参数,如echo 1 2 3
会做。它只从stdin
读取。因此,上面的例子是误导性的。一种方法我都试过:
proc = subprocess.Popen(["wc", "-l"], stdin=subprocess.PIPE)
proc.stdin.write(bytes([42]))
此输出1这是正确的行数,但实际写入的字节数。所以我有两个问题:
- 如何正确使用一个字节数组发送到
proc.stdin.write
? - 如何将proc的stdout重定向到当前进程?
这种方法对'echo'示例很有用。但是,它不适用于给定的脚本。我编辑了我的问题。谢谢你的帮助!如果你再看一眼,我会很开心。 – pylipp
您的编辑让我走上正轨,谢谢!我应用了一些修改:我使用换行符加入了数字。 'proc.std.write()'需要一个字节对象,所以我通过'bytearray(numbers_str,'utf-8')''转换'numbers_str'。 'read'的输出也一样,所以我放了一个'.decode()'。 – pylipp