簡體   English   中英

Python subprocess.check_call 的工作方式與 bash 不同

[英]Python subprocess.check_call works in a different way than bash

我正在嘗試使用 subprocess.check_call 通過 Python 運行 Rscript。

Rscript 非常簡單,它只檢查 Rpackage 是否存在,如果不存在則安裝它。

local({r <- getOption("repos")
     r["CRAN"] <- "https://cloud.r-project.org/"
     options(repos=r)
})

if (!require("glue")) install.packages("glue")

當我在 bash 中運行這樣的命令時

Rscript packages.R

它工作正常。

但是當我嘗試使用 subprocess.check_call 運行它時

subprocess.check_call(f"Rscript packages.R",
                      shell=True,
                      env=self.env)

我收到這樣的錯誤:

* installing *source* package 'glue' ...
** package 'glue' successfully unpacked and MD5 sums checked
** libs
gcc -std=gnu99 -I/usr/share/R/include -DNDEBUG      -fpic  -g -O2 -fdebug-prefix-map=/build/r-base-3.3.3=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -g  -c glue.c -o glue.o
gcc: error trying to exec 'cc1': execvp: No such file or directory
/usr/lib/R/etc/Makeconf:132: recipe for target 'glue.o' failed
make: *** [glue.o] Error 1
ERROR: compilation failed for package 'glue'
* removing '/usr/local/lib/R/site-library/glue'

The downloaded source packages are in
    '/tmp/Rtmpym9Dy9/downloaded_packages'

您顯然通過提供自己的環境帶走了PATH (有用的價值)。 如果您想像 shell 一樣,只需對您繼承的環境進行最少的必要更改。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM