首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >os.system(<command>)通过Python执行::限制?

os.system(<command>)通过Python执行::限制?
EN

Stack Overflow用户
提问于 2015-07-08 17:16:02
回答 2查看 766关注 0票数 4

我正在编写一个python (ver2.7)脚本,以自动化这个入门示例 for 国际组织中的一组命令。

问题:当我运行整个脚本时,我反复地遇到以下错误:

代码语言:javascript
复制
Current Directory is not empty  
No project is found in this directory  
No project is found in this directory  

但是,当我只在代码行标记前运行第一个脚本,然后手动键入接下来的三行,或者在手动访问beep文件夹后运行最后三行(从"ino init -t blink“行开始),那么我就能够成功地执行相同的代码。

os.system()是否有我遇到的限制?

我的代码:

代码语言:javascript
复制
import os,sys  
def upload()  
    os.system("cd /home/pi/Downloads")  
    os.system("mkdir beep")  
    os.system("cd beep") #will refer to this code junction in question description  
    os.system("ino init -t blink")  
    os.system("ino build")  
    os.system("ino upload")  
    sys.exit(0)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-08 17:25:28

您可以使用子处理模块和os.mkdir来创建目录,您可以将当前的工作目录cwd传递给check_call,从而实际执行目录中的命令:

代码语言:javascript
复制
from subprocess import check_call
import os 
def upload(): 
    d = "/home/pi/Downloads/beep"
    os.mkdir(d)
    check_call(["ino", "init", "-t", "blink"],cwd=d)  
    check_call(["ino", "build"],cwd=d)  
    check_call(["ino", "upload"],cwd=d) 

非零退出状态将引发CalledProcessError,您可能希望捕获该状态,但一旦成功,您知道所有命令都返回了0退出状态。

票数 0
EN

Stack Overflow用户

发布于 2015-07-08 17:26:58

是的,当为os.system()运行cd命令时,它实际上不会更改process上下文的当前目录。来自文档 -

os.system(command) 在子subshell中执行命令(字符串)。这是通过调用Standard函数系统()来实现的,并且具有相同的限制。对sys.stdin等的更改没有反映在已执行命令的环境中。

因此,即使您正在更改os.system()调用中的目录,下一个os.system调用仍然发生在同一个目录中。这可能导致了你的问题。

您应该尝试使用os.chdir()来更改目录,而不是os.system()调用。

最好是使用subprocess模块作为@PadraicCunningham在他的回答中解释。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31299360

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档