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

通过bash脚本将输入写入python脚本,python,bash,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

我有一个需要用户输入的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的一行,如果我按enter键,它会在表单中给我一个错误

回溯(最近一次呼叫最后一次): 文件“shovertry.py”,第69行,在 infle=eval(原始输入(sys.argv[1]))

文件“”,第0行

^ SyntaxError:分析时出现意外的EOF


因为输入应该是字符串,所以我尝试使用将参数传递给Python脚本的
stdin
,而不是像现在这样作为命令行参数传递。在Bash中,可以执行以下操作:

python filename.py <<< arg1 arg2 arg3

python filename.py您希望将参数传递给python脚本的
stdin
,而不是像现在这样作为命令行参数传递。在Bash中,可以执行以下操作:

python filename.py <<< arg1 arg2 arg3

python filename.py不要使用
eval
!特别是对于用户输入


如果那些
arg
s是您的输入,您甚至不需要
raw_输入
;只需设置
infle=sys.argv[1]


但是,您应该仔细考虑一下原始的with you args(以及为什么
eval
完全没有必要,甚至是错误的)。你以后还会遇到这种情况。

不要使用
eval
!特别是对于用户输入


如果那些
arg
s是您的输入,您甚至不需要
raw_输入
;只需设置
infle=sys.argv[1]


但是,您应该仔细考虑一下原始的with you args(以及为什么
eval
完全没有必要,甚至是错误的)。以后您将再次遇到此问题。

切勿使用
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
>>> 

切勿使用
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
>>> 

不要使用
eval
!特别是对于用户输入。如果那些
arg
s是您的输入,您甚至不需要
raw_输入
;只需设置
infle=sys.argv[1]
等@AndrasDeak仔细查看-arg1 arg2 arg3仅用作
原始输入的提示;从
sys.stdin
读取的三行代码非常重要。@Błotosmętek查看代码质量,我相当肯定OP意味着这些参数是输入。这就是为什么“按enter键”会导致错误:输入是空字符串。不要使用
eval
!特别是对于用户输入。如果那些
arg
s是您的输入,您甚至不需要
raw_输入
;只需设置
infle=sys.argv[1]
等@AndrasDeak仔细查看-arg1 arg2 arg3仅用作
原始输入的提示;从
sys.stdin
读取的三行代码非常重要。@Błotosmętek查看代码质量,我相当肯定OP意味着这些参数是输入。这就是为什么“按enter键”会导致错误:输入是空字符串。我建议不要在末尾添加
eval
警告:这些应该是巨大的红色闪烁危险标志。特别是考虑到从SO复制粘贴代码的用户数量,他们没有第二个想法(或者第一个想法)。@AndrasDeak给出了很好的建议。我建议不要在末尾添加
eval
警告:这些应该是巨大的红色闪烁危险标志。特别是考虑到从SO复制粘贴代码的用户数量,他们没有第二个想法(或者第一个想法)。@AndrasDeak这是一个很好的建议。