如何从命令行将字符串传递给Python脚本的标准输入

10 投票
3 回答
8968 浏览
提问于 2025-04-16 16:30

目前,我使用以下命令来实现这个功能:

$ python scriptName.py <filePath

这个命令使用"<"符号将文件内容输入到脚本中。这样做没问题,我可以用 sys.stdin.read 来获取文件的数据。

但是,如果我想把文件的数据作为字符串传递呢?我不想通过"<"操作符来传递文件路径。

有没有办法可以将字符串作为输入传递给 Python 脚本呢?

谢谢,

Kamal

3 个回答

0

我可能理解错了,但根据我对提问者问题的理解,他现在可能是在他的Python脚本中调用一个操作系统命令来运行一个shell脚本,然后使用一个<符号把一个文件的内容传递给这个shell脚本,而且他是直接写死了<和文件名。

他真正想要的是一种更灵活的方法,可以把在Python中定义的字符串传递给这个shell脚本。

如果是这样的话,我建议的方法是:

import subprocess;

script_child = subprocess.Popen(['/path/to/script/myScript.sh'], stdin=subprocess.PIPE, stdout=subprocess.PIPE)

stdout, stderr = clone_child.communicate("String to pass to the script.")

print "Stdout: ", stdout
print "Stderr: ", stderr

另外,你可以在最开始的Popen中这样传递参数给脚本:

script_child = subprocess.Popen(['/path/to/script/myScript.sh', '-v', 'value', '-fs'], stdin=subprocess.PIPE, stdout=subprocess.PIPE)
5

有一个叫做 raw_input 的东西,你可以用它让程序提示你输入内容,然后你可以输入一个字符串。没错,这个在教程的前几页就提到了,大家可以去 http://www.python.org 看看。

>>> x = raw_input()
Something  # you type
>>> x
'Something'

而通过 < 这个方式来输入内容,是属于命令行的操作,而不是 Python 的功能。

10

根据我理解你的问题,你现在有一个文件 abc.txt,里面的内容是:

Input to my program

你是这样执行它的:

python scriptName.py <abc.txt

现在你不想再通过这个文件来输入内容,而是想把输入直接作为命令的一部分,同时仍然从标准输入(stdin)读取。在Windows命令行中,你可以这样做:

echo Input to my program | python scriptName.py

而在Linux/Mac上,你最好用引号把它包起来,以避免命令行的扩展:

echo "Input to my program" | python scriptName.py

这在Windows上只适用于单行输入(据我所知),而在Linux(可能还有Mac)上,你可以使用 -e 选项来插入换行符:

echo -e "first line\nsecond line" | python scriptName.py

撰写回答