我正在尝试对以下代码进行一些错误处理。在
排队子流程.Popen...... 如果shell=True,如果给定了正确的文件名,脚本将加密,但是没有具有该名称的文件,则不会打印错误代码,但它确实在终端上显示为没有现有的文件/目录。在
如果运行shell=False,则无法加密文件,但会打印错误消息。在
有人能解释一下我做错了什么吗?因为我在这里看过不同的帖子,但我仍然不明白为什么它不起作用。我的猜测是它与脚本的shell=True部分有关。在
SrcDIR=“/home/test/testsource/”
DstDIR=“/home/test/testdest/”
try:
subprocess.Popen(["openssl aes-128-cbc -salt -in " + SrcDIR + str(var1) + " -out " + DstDIR + "enc." + str() + " -k " + str(var2)], shell=True)
output3 = ("file " + str(var1) + "created")
print(output3)
except IOError as reason2:
errormsg = ("Error encrypting file due to: \n" + str(reason2))
print(errormsg)
如果将
shell
参数设置为False
,则args
参数将成为字符串的序列,而不是单个字符串:第一个args
元素是要运行的程序的名称,后续元素是该程序的参数,例如(如果我正确理解您的代码):这也比尝试使用
shell
=True
传递单个命令字符串要好,因为这样就不必担心对shell有特殊意义的字符。在即使shell=True,如果第一个参数是字符串列表,它也会将其解释为调用的参数列表。还有其他原因可能不想使用shell=True,但不需要使用shell=True来使用参数列表并不是其中之一。在
除此之外,lawrenced'Oliveiro在使用列表与单个字符串的好处方面是正确的。在
相关问题 更多 >
编程相关推荐