如何从命令行将字符串传递给Python脚本的标准输入
目前,我使用以下命令来实现这个功能:
$ 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