提问人:gott18 提问时间:10/12/2023 最后编辑:wjandreagott18 更新时间:10/12/2023 访问量:80
如何在 Python 中获取 Pipe 和 Here String?
How to get Pipe and Here String in Python?
问:
通过以下方式调用 Python 脚本时
echo foobar | python myscript.py <<< test123
如何在 Python 脚本中同时获取两个字符串(“foobar”和“test123”)?
尝试时
import sys
import select
r, w, e = select.select([sys.stdin], [], [], 0)
if r:
line = sys.stdin.readline().strip()
print("Line: " + line)
如果调用为 ,则脚本仅返回“test123”。echo foobar | python myscript.py <<< test123
如果通过“foobar”调用,则返回。echo foobar | python myscript.py
如果调用方式,也返回“test123”。python myscript.py <<< test123
但是我怎样才能得到两个字符串呢?
答:
1赞
wjandrea
10/12/2023
#1
这是不可能的,因为 pipe 和 herestring 都使用 stdin,所以一个将始终优先(herestring)。
作为解决方法,您可以使用 过程替换 。然后,脚本需要将文件名作为参数,例如:<()
import sys
line = sys.stdin.readline().strip()
print("Line from stdin:", line)
fname = sys.argv[1]
with open(fname) as f:
line = f.readline().strip()
print(f"Line from file ({fname}):", line)
$ ./tmp.py <(echo foobar) <<< "test123"
Line from stdin: test123
Line from file (/dev/fd/63): foobar
如果要简化,可以使用 fileinput
:
import fileinput
for line in fileinput.input():
line = line.strip()
print(f"Line from fileinput ({fileinput.filename()}):", line)
$ ./tmp.py - <(echo foobar) <<< "test123"
Line from fileinput (<stdin>): test123
Line from fileinput (/dev/fd/63): foobar
(stdin 指定为 。-
下一个:无法在 C 语言中关闭线路缓冲
评论
foobar
foobar
python myscript.py -foobar 2
print(sys.argv)
['myscript.py', '-foobar', '2']
echo foobar | { cat ; echo "test123"; } | python myscript.py