Python子进程虽然在命令行中工作,但失败

Python子进程虽然在命令行中工作,但失败,python,subprocess,Python,Subprocess,我正在尝试从Python运行R脚本。Rscripttrain.R与Jupyter笔记本位于同一文件夹中。工作目录已设置为该文件夹 导入子流程 尝试: 子进程检查调用(['Rscript','train.R'],shell=False) 除subprocess.CalledProcessError为e外: 打印(例如输出) 打印(如返回代码) 打印(e) 打印(e.stderr) 我收到一个被称为进程的错误: None 1 Command '['Rscript', 'train.R']' ret

我正在尝试从Python运行R脚本。Rscript
train.R
与Jupyter笔记本位于同一文件夹中。工作目录已设置为该文件夹

导入子流程
尝试:
子进程检查调用(['Rscript','train.R'],shell=False)
除subprocess.CalledProcessError为e外:
打印(例如输出)
打印(如返回代码)
打印(e)
打印(e.stderr)
我收到一个被称为进程的错误:

None
1
Command '['Rscript', 'train.R']' returned non-zero exit status 1
None
我尝试设置参数
shell=True
,并尝试设置参数
cwd=os.path.dirname(os.path.realpath(“train.R”))
,如前所述

如果我打开文件夹中的控制台,Rscript train.R命令工作正常


我做错了什么?

我建议你改用
Popen

import subprocess
try:
    pro = subprocess.Popen(['Rscript', 'train.R'], shell=False)

    stdout, stderr = pro.communicate()

    print(stdout)
    print(stderr)

这样,您应该能够从子流程中获取错误或输出值

我建议您改用
Popen

import subprocess
try:
    pro = subprocess.Popen(['Rscript', 'train.R'], shell=False)

    stdout, stderr = pro.communicate()

    print(stdout)
    print(stderr)

这样,您应该能够从子流程中获取错误或输出值
stderr
显示了什么?它已附加到异常。@它所包含的对象为None它是
None
,因为您既不捕获stdout也不捕获stderr。您应该使用
subprocess.run(…,capture\u output=True)
。参见。
stderr
揭示了什么?它已附加到异常。@它所包含的对象为None它是
None
,因为您既不捕获stdout也不捕获stderr。您应该使用
subprocess.run(…,capture\u output=True)
。看,我只是想加上。。。如果由于某种原因,无法从进程中获得预期的stdout和stderr输出,则可能还需要在Popen构造函数中包含“subprocess.PIPE”参数。ie pro=subprocess.Popen(['Rscript','train.R'],shell=False,stdout=subprocess.PIPE,stderr=subprocess.PIPE)只想添加。。。如果由于某种原因,无法从进程中获得预期的stdout和stderr输出,则可能还需要在Popen构造函数中包含“subprocess.PIPE”参数。ie pro=subprocess.Popen(['Rscript','train.R'],shell=False,stdout=subprocess.PIPE,stderr=subprocess.PIPE)