目前,我使用以下命令执行此操作
$ python scriptName.py <filePath
此命令使用“&lt;”将文件stdin到脚本。 它工作正常,我可以使用sys.stdin.read来获取文件数据。
但是,如果我想将文件数据作为字符串传递, 我不想在运算符“&lt;”中传递文件路径。
无论如何,我可以将String作为stdin传递给python脚本吗?
谢谢, 哈拉
答案 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)