- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我是第一次在这里寻求一些帮助,因为我更像是一个 ServerFault 的人。
我正在用 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 脚本执行它时,我得到了奇怪的错误。我什至用 print 函数替换了 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 文档并使用了以下代码:
cmd = 'xen-create-image --hostname '+nom+' --memory '+memory+' --partitions=/root/scripts/part.tmp --ip '+ip+' --netmask '+netmask+' --gateway '+gateway+' --passwd'
args = shlex.split(cmd)
subprocess.call(args)
遗憾的是,它并没有改变任何东西......
EDIT2
我已经使用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
作为一些值。$
或其他内容——它将被 shell 扩展并替换为该环境变量的内容。在不知道您的代码和 xen-create-image
的情况下,我认为这是您问题的原因。
PS:务必查看命令的退出代码是否为零,如果不是,则采取适当的措施。 (如果您确定它将始终为零,请使用 check_call
,如果它不为零,则它会引发;这样,如果它失败,您至少会有一个定义的行为。)
关于python - 使用 Python 和 subprocces.call 执行脚本的问题在 Bash 中仍然有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2908935/
尝试使用带有 subprocess.call 的 python 运行命令,但出现语法错误 #Takes cipher and password, executes openssl command in
我是第一次在这里寻求一些帮助,因为我更像是一个 ServerFault 的人。 我正在用 Python 编写一些脚本,到目前为止我一直很喜欢这门语言,但我遇到了一个小问题,它使我的脚本无法正常工作。
我是一名优秀的程序员,十分优秀!