如何从命令行界面将字符串作为stdin传递给python脚本

时间:2011-04-27 11:55:54

标签: python

目前,我使用以下命令执行此操作

$ python scriptName.py <filePath

此命令使用“&lt;”将文件stdin到脚本。 它工作正常,我可以使用sys.stdin.read来获取文件数据。

但是,如果我想将文件数据作为字符串传递, 我不想在运算符“&lt;”中传递文件路径。

无论如何,我可以将String作为stdin传递给python脚本吗?

谢谢, 哈拉

3 个答案:

答案 0 :(得分:4)

您可以使用raw_input作为输入的程序提示,您可以发送一个字符串。是的,在http://www.python.org教程的前几页中提到了它。

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

通过<发送输入shell重定向操作是shell的属性,而不是python。

答案 1 :(得分:3)

我阅读您的问题的方式,您目前有一些文件abc.txt包含内容

Input to my program

你这样执行:

python scriptName.py <abc.txt

现在你不再想要通过这个文件,而是输入作为命令的一部分,同时仍然从stdin读取。在Windows命令行上工作,你可以这样做:

echo Input to my program | python scriptName.py

在Linux / Mac上你最好引用它来避免shell扩展:

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

这仅适用于Windows(AFAIK)上的单行输入,而在linux(可能还有Mac)上,您可以使用-e开关插入换行符:

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

答案 2 :(得分:0)

我可能错了,但是我读OP问题的方式,我认为他目前可能正在调用os命令在他的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)