【问题标题】:Executing sbt in command line via python script and outputting to file通过python脚本在命令行中执行sbt并输出到文件
【发布时间】:2016-12-30 19:37:58
【问题描述】:

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

在终端中手动运行它

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

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

我想编写一个 Python 脚本,它会自动执行此操作,并另外输出一个带有 Scala 脚本输出的“东西”的 json 文件。

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

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

我完全不知道为什么会发生这种情况。我是子流程的新手,所以请轻视我!

【问题讨论】:

    标签: scala python-2.7 sbt subprocess stdout


    【解决方案1】:

    popen 在 python 中接受一个 shell 参数列表。你只通过了一个!

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

    显然,这是行不通的。

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

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

    【讨论】:

    • 啊!这肯定是我所缺少的。非常感谢 - 一旦时间允许,我会将问题标记为已回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-30
    • 1970-01-01
    • 1970-01-01
    • 2020-07-02
    • 2015-10-30
    相关资源
    最近更新 更多