通过bash脚本将输入写入python脚本

时间:2017-07-02 09:48:55

标签: python bash

我有一个需要用户输入的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

因为输入应该是一个字符串,我尝试使用

3 个答案:

答案 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