通过bash脚本将输入写入python脚本
我有一个需要用户输入的python脚本,但是因为我需要运行300次,所以我一直在寻找一种通过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
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这是一个很好的建议。