通过python脚本在命令行执行sbt并输出到文件

时间:2016-08-23 20:37:47

标签: scala python-2.7 sbt subprocess stdout

我在目录/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

我完全不知道为什么会这样。我是子进程的新手,所以要点亮我吧!

1 个答案:

答案 0 :(得分:3)

python中的

popen获取shell参数列表。你只通过了一个!

所以它试图执行一个名为fully 'sbt --error "run /Me/Desktop/jsons/jsonExample.json"'的文件。

显然,这不起作用。

如果您使用popen;只传递一个简单的数组 - 你不必关心转义:

subprocess.popen(['sbt', '--error', 'run /Me/Desktop/...'], cwd = BASEDIR, stdout = subprocess.PIPE)