我在目录/Desktop/jsons
中有一组json文件,我有一个Scala脚本,它接收一个json并输出内容。我可以通过cd
在Scala脚本(/Me/dev/scalastuff
)目录中运行
sbt --error "run /Desktop/jsons/jsonExample.json"
,
在终端输出我想要的东西。
我想编写一个自动执行此操作的Python脚本,并另外输出一个带有" stuff"的json文件。那些由Scala脚本输出的内容。
我现在的问题是使用子处理。当我尝试运行时
BASEDIR = '/Me/dev/scalastuff'
p = subprocess.Popen(['sbt --error "run /Desktop/jsons/jsonExample.json"'], cwd = BASEDIR, stdout = subprocess.PIPE)
out = p.stdout.read()
print out
我得到OSError: [Errno 2] No such file or directory
。
我完全不知道为什么会这样。我是子进程的新手,所以要点亮我吧!
答案 0 :(得分:3)
popen
获取shell参数列表。你只通过了一个!
所以它试图执行一个名为fully 'sbt --error "run /Me/Desktop/jsons/jsonExample.json"'
的文件。
显然,这不起作用。
如果您使用popen
;只传递一个简单的数组 - 你不必关心转义:
subprocess.popen(['sbt', '--error', 'run /Me/Desktop/...'], cwd = BASEDIR, stdout = subprocess.PIPE)