我有一个需要用户输入的python脚本,但由于我需要运行大约300次,我一直在寻找一种通过bash代码提供输入的方法。我的python代码格式为
import sys
inFile = eval(raw_input(sys.argv[1]))
outFile1 = eval(raw_input(sys.argv[2]))
finalfit = eval(raw_input(sys.argv[3]))
然后我继续做我的事。
在我刚写的bash脚本中
python filename.py arg1 arg2 arg3
但是当我尝试运行它时,它只是用arg1返回一行,如果我按回车,它会在表单中给我一个错误
追踪(最近一次通话): 文件" narrowtry.py",第69行,in inFile = eval(raw_input(sys.argv [1]))
文件"",第0行
^ SyntaxError:解析时意外的EOF
因为输入应该是一个字符串,我尝试使用
答案 0 :(得分:2)
永远不要使用eval
来解析用户输入!它可以做危险的事情。
话虽如此,请以解释器模式查看代码正在执行的操作:
>>> eval(raw_input('arg1'))
arg1 # press enter here
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 0
^
SyntaxError: unexpected EOF while parsing
>>>
sys.argv[1]
已包含arg1
。然后,您将此作为参数传递给raw_input
函数,然后期望用户输入。由于您没有传递任何内容,eval
只接收换行符,并抛出错误。
通过执行以下操作来解决此问题:
inFile = sys.argv[1]
答案 1 :(得分:1)
不要使用eval
!特别是对于用户输入。 It's dangerous
如果您的输入是arg
,那么您甚至不需要raw_input
;只需设置inFile = sys.argv[1]
等。
但是你应该通过原始的was trying to do与你一起思考它(以及为什么eval
完全没必要,甚至是错误的)。你将来会再遇到这种情况。
答案 2 :(得分:-1)
您希望将参数传递给Python脚本的stdin
,而不是像现在一样将它们作为命令行参数传递。在Bash中你可以这样做:
python filename.py <<< arg1 arg2 arg3