这是我第一次在这里请求一些帮助,因为我更像是一个服务器故障的人。
我正在用Python编写一些脚本,到目前为止,我一直很喜欢这种语言,但是我有一个小问题,就是让我的脚本无法工作。在
下面是有问题的代码行:
subprocess.call('xen-create-image --hostname '+nom+' --memory '+memory+' --partitions=/root/scripts/part.tmp --ip '+ip+' --netmask '+netmask+' --gateway '+gateway+' --passwd',shell=True)
我也试过同样的方法os.popen公司. 所有变量设置正确。在
当我在我的常规Linux shell中执行有问题的命令时,它工作得非常好,但是当我使用Python脚本执行它时,会出现一些奇怪的错误。我甚至换了subprocess.call()以确保我使用的是命令的精确输出。在
我研究了我的shell的环境变量,但是它们几乎是一样的。。。我会贴出我得到的错误,但我不确定它是否与我的问题有关。在
Use of uninitialized value $lines[0] in substitution (s///) at /usr/share/perl5/Config/IniFiles.pm line 614. Use of uninitialized value $_ in pattern match (m//) at /usr/share/perl5/Config/IniFiles.pm line 628.
我不是Python专家,所以我很可能遗漏了一些东西。在
提前感谢您的帮助
安托万
编辑
按照miax的建议,我不再使用shell=True。相反,我查看了subprocess的Python文档,并使用了以下代码:
^{pr2}$可悲的是,这并没有改变任何东西。。。在
编辑2
我已经使用了miax给出的提示,但我仍然得到上面的错误。。。这是我用过的代码。在
cmd = ['xen-create-image', '--hostname', nom, '--memory', memory, '--partitions=/root/scripts/part.tmp', '--ip', ip, '--netmask', netmask, '--gateway', gateway, '--passwd']
subprocess.call(cmd)
这真的很奇怪。。。当我在常规shell中运行这个命令时,这个命令可以正常工作。。。在
您(在大多数情况下)不希望将子进程与
shell=True
一起使用。 将参数列表传递给命令。那就是foo; rm -rf /; echo
作为一些值传递。在在不知道您的代码和
xen-create-image
的情况下,我认为这是您问题的原因。在PS:一定要查看命令的退出代码是否为零,如果不是,则采取适当的措施。(如果您确定它将始终为零,请使用
check_call
,否则将引发;这样,如果失败,则至少有一个已定义的行为。)在失败的Edit2示例中,您认为您给
xen-create-image
提供了以下选项:--hostname
--memory
--partitions=...
。。。但您实际上指定了以下选项:
--hostname
空格--memory
空格--partitions=...
你有这样一句话:
但你需要去掉多余的空间:
^{pr2}$xen-create-image
脚本是否以hashbang开头?也就是说,第一行是不是有点像是吗?这是需要检查的一件事。另一种方法是,您可以尝试将命令调用为:
^{pr2}$您可能需要打印
cmd
来验证这是您要运行的命令(即检查替换)。在相关问题 更多 >
编程相关推荐