Oracle Linux中的python3子进程(wget -o)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle Linux中的python3子进程(wget -o)相关的知识,希望对你有一定的参考价值。
我看到python子进程上有几个帖子调用bash shell命令。但除非有人找到我遗漏的链接,否则我无法找到问题的答案。
所以这是我的代码的开始。
import os;
import subprocess;
subprocess.call("wget ‐O /home/oracle/Downloads/puppet-repo.rpm https://yum.puppetlabs.com/puppetlabs-release-el-6.noarch.rpm");
当我做
wget ‐O /home/oracle/Downloads/puppet-repo.rpm https://yum.puppetlabs.com/puppetlabs-release-el-6.noarch.rpm
直接在终端,它的工作原理。
但我的IDE给了我FileNotFoundError: [Errno 2] No such file or directory: 'wget'
同样,我是新手在python中调用os / subprocess模块,我很感激有关如何有效使用这些模块的任何见解。
{更新:有了miindlek的回答,我得到了这些错误。 1 - subprocess.call(["wget", "‐O", "/home/oracle/Downloads/puppet-repo.rpm", "https://yum.puppetlabs.com/puppetlabs-release-el-6.noarch.rpm"])
}
--2015-06-07 17:14:37-- http://%E2%80%90o/
Resolving ‐o... failed: Temporary failure in name resolution.
wget: unable to resolve host address “‐o”
/home/oracle/Downloads/puppet-repo.rpm: Scheme missing.
--2015-06-07 17:14:52-- https://yum.puppetlabs.com/puppetlabs-release-el-6.noarch.rpm
{与第二个bash方法subprocess.call("wget ‐O /home/oracle/Downloads/puppet-repo.rpm https://yum.puppetlabs.com/puppetlabs-release-el-6.noarch.rpm", shell=True)
}
Resolving yum.puppetlabs.com... 198.58.114.168, 2600:3c00::f03c:91ff:fe69:6bf0
Connecting to yum.puppetlabs.com|198.58.114.168|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 10184 (9.9K) [application/x-redhat-package-manager]
Saving to: “puppetlabs-release-el-6.noarch.rpm.1”
0K ......... 100% 1.86M=0.005s
2015-06-07 17:14:53 (1.86 MB/s) - “puppetlabs-release-el-6.noarch.rpm.1” saved [10184/10184]
FINISHED --2015-06-07 17:14:53--
Downloaded: 1 files, 9.9K in 0.005s (1.86 MB/s)
Process finished with exit code 0
您应该将命令字符串拆分为参数列表:
import subprocess
subprocess.call(["wget", "-O", "/home/oracle/Downloads/puppet-repo.rpm", "https://yum.puppetlabs.com/puppetlabs-release-el-6.noarch.rpm"])
您还可以使用shell选项作为替代:
import subprocess
subprocess.call("wget -O /home/oracle/Downloads/puppet-repo.rpm https://yum.puppetlabs.com/puppetlabs-release-el-6.noarch.rpm", shell=True)
顺便说一下,在python中你不需要在一行的末尾添加分号。
更新选项-O中的破折号是一个utf8连字符Charakter,而不是破折号。参见例如:
>>> a = "‐" # utf8 hyphen
>>> b = "-" # dash
>>> str(a)
'xe2x80x9'
>>> str(b)
'-'
您应删除旧破折号并将其替换为普通破折号。我更新了以前的源代码。你也可以从那里复制它。
这听起来主要是因为你的IDE正在启动那个python子进程而不是“直接在终端中”。
这将是一个阅读建议,而不是直接回答这个问题。
检查你的IDE;阅读有关如何发布内容的文档。
1 - 在终端类型$ env
,你测试$ wget
2 - 在IDE import os ; print(os.environ)
3 - 在这里阅读关于壳和Popen https://docs.python.org/3/library/subprocess.html
从那里开始学习过程。
我甚至建议更换
subprocess.call("wget -O /home/oracle/Downloads/puppet-repo.rpm https://yum.puppetlabs.com/puppetlabs-release-el-6.noarch.rpm", shell=True)
明确声明您想要使用什么'shell'
subprocess.Popen(['/bin/sh', '-c', 'wget' '<stuff>'])
缓解未来的IDE / shell / env假设问题。
以上是关于Oracle Linux中的python3子进程(wget -o)的主要内容,如果未能解决你的问题,请参考以下文章
python3中的多处理在mac和linux上运行时得到不同的值
linux 中的多进程中,父进程与子进程共享的代码段和数据段、堆栈段,是整个程序还是出现在fork()函数后?