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

Executing sbt in command line via python script and outputting to file

我在目录 /Desktop/jsons 中有一组 json 文件,我有一个 Scala 脚本,它接收 json 并输出内容。我可以通过 cding 进入 Scala 脚本 (/Me/dev/scalastuff) 的目录并 运行ning

在终端中手动 运行 它

sbt --error "run /Desktop/jsons/jsonExample.json"

在终端输出我想要的东西。

我想编写一个 Python 脚本,它会自动执行此操作,并另外输出一个 json 文件,其中包含 Scala 脚本输出的 "stuff"。

我现在的问题是使用子处理。当我尝试 运行

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

我完全不知道为什么会这样。我是子流程的新手,所以对我轻一点!

popen in python 接受一个包含 shell 个参数的列表。你只超过了一个!

所以它正在尝试执行一个完全名为 'sbt --error "run /Me/Desktop/jsons/jsonExample.json"'.

的文件

显然,这行不通。

如果你使用popen;只传递一个简单的数组——你不需要关心转义:

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