我正在编写一个python (ver2.7)脚本,以自动化这个入门示例 for 国际组织中的一组命令。
问题:当我运行整个脚本时,我反复地遇到以下错误:
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()是否有我遇到的限制?
我的代码:
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)发布于 2015-07-08 17:25:28
您可以使用子处理模块和os.mkdir来创建目录,您可以将当前的工作目录cwd传递给check_call,从而实际执行目录中的命令:
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退出状态。
发布于 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在他的回答中解释。
https://stackoverflow.com/questions/31299360
复制相似问题