【问题标题】:Popen subprocess does not work inside a SublimeREPL?Popen 子进程在 SublimeREPL 中不起作用?
【发布时间】:2017-07-15 15:18:30
【问题描述】:

我使用conda 创建一个包含R package 的Python 2.7 环境。如果我在控制台中打开 Python 会话,我可以检查 R 是否确实安装了 Popen 构造函数:

$ python
>>> from subprocess import Popen, PIPE
>>> proc = Popen(["which", "R"], stdout=PIPE, stderr=PIPE)
>>> proc.wait()
0

0 表示已安装。但是,如果我在完全相同的 Python 环境下运行的 Sublime Text 3 REPL 中尝试相同的命令,我会得到 1

为什么会这样,我该如何解决?

【问题讨论】:

    标签: python r sublimetext3 sublimerepl


    【解决方案1】:

    你需要沟通:

    proc = Popen(['which', 'python'], stdout=PIPE)
    proc.communicate()
    
    ('/Users/Kelvin/virtualenvs/foo/bin/python\n', None)
    

    wait 只是等待子进程完成并给你返回码(如果成功则为 0)

    如果您收到不同的错误代码(1 表示失败),我会考虑确认您的虚拟环境。试试sys.executable

    【讨论】:

    • 在 Python 会话中 proc.communicate() 返回:('/home/gabriel/anaconda3/envs/asteca27/bin/R\n', '')。在 REPL 中,它返回 ('', '')。所以我猜它没有检测到安装在 REPL 的anaconda3 环境中的R,即使使用communicate()
    • 可能是如果你是从你的 repl 做的(是它,spyder,jupyter,其他?)它不是写到标准输出,而是回到任何 repl 是所以它回来空白?老实说,我不确定最后一部分。
    • 我正在使用 Sublime Text 3。无论如何,谢谢,communicate() 很有用。
    猜你喜欢
    • 2019-09-05
    • 2012-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-05
    • 2013-10-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多