python-如何使用子进程运行virtualenv软件包安装
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python-如何使用子进程运行virtualenv软件包安装,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1514字,纯文字阅读大概需要3分钟。
内容图文
我正在为我的程序之一编写引导代码,并尝试使用subprocess.call安装到我的virtualenv目录中
最初我使用:
subprocess.call(['pip', 'install', '-E', dir_name, 'processing'])
在ubuntu上重新运行时,我注意到-E已过时(http://pypi.python.org/pypi/pip/),需要使用:
virtualenv dir_name && dir_name/bin/pip install processing
从cmd行可以正常工作,但不能在子进程中使用:
subprocess.call(['virtualenv', dir_name, '&&', '{0}/bin/pip'.format(dir_name), 'install', 'processing'])
返回此错误消息:
There must be only one argument: DEST_DIR (you gave dir_name && dir_name/bin/pip install processing)
Usage: virtualenv [OPTIONS] DEST_DIR
我也尝试过virtualenv.create_bootstrap_script(extra_text)(但无法弄清楚,并且我正在运行一些其他来自git的脚本)
想知道子流程中我做错了什么或我可以更改什么.
谢谢!
解决方法:
只需检查第一个命令的状态,然后有条件地运行第二个命令:
retval = subprocess.call(
['virtualenv', dir_name]
)
if retval == 0:
# a 0 return code indicates success
retval = subprocess.call(
['{0}/bin/pip'.format(dir_name), 'install', 'processing']
)
if retval == 0:
print "ERROR: Failed to install package 'processing'"
else:
print "ERROR: Failed to created virtualenv properly."
警告:危险在下面!
为了&&要使用令牌,必须在subprocess.call中使用参数shell = True.但是,如果您要接受用户的输入,则绝对不能使用shell = True,因为这将允许任意代码执行.
此外,您需要将args一起加入.
如果您使用的是dir_name,则您正在对其进行硬编码:
cmdline = ' '.join(['virtualenv', dir_name, '&&', '{0}/bin/pip'.format(dir_name), 'install', 'processing'])
subprocess.call(
cmdline,
shell=True
)
内容总结
以上是互联网集市为您收集整理的python-如何使用子进程运行virtualenv软件包安装全部内容,希望文章能够帮你解决python-如何使用子进程运行virtualenv软件包安装所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。