Невозможно прочитать файл из-за незавершенного подпроцесса: Python - PullRequest
0 голосов
/ 30 мая 2019

Я использую subprocess для запуска файла script.R из test.py.Мой test.py выглядит как:

import subprocess
import pandas as pd
subprocess.call(["/usr/bin/Rscript", "--vanilla", "script.R"])   #line 3
df=pd.read_csv("output.csv")                                     #line 4

script.R идет как:

library(limma)
df <- read.csv("input.csv")
df<-normalizeCyclicLoess(df)
write.csv(df,"output.csv")

Когда я запускаю вышеуказанный файл (test.py), я получаю ошибку:

FileNotFoundError: [Errno 2] File b'output.csv' does not exist: b'output.csv'

Я понимаю, что эта ошибка связана с тем, что файл output.csv не существует в моем рабочем каталоге.Но я предполагаю, что он будет создан script.R, что, вероятно, не происходит, потому что до завершения выполнения line 3 python переходит на line 4.Для этого мы использовали справку из здесь , и, как уже упоминалось, мы используем call для этого.Что тогда не так?Спасибо ...

EDIT : Я заметил, что если я не импортирую библиотеки в моем коде (например, limma выше), все работает нормально.Я могу написать любой длинный код, как я хочу, и он не дает мне никакой ошибки и приступает к завершению.Но, как только я импортирую любую библиотеку, subprocess.call(....) дает мне ненулевой результат (ноль означает, что процесс завершен).Для теста я изменил свой script.R на library(limma) (и ничего больше) (пробовал и для других библиотек - получил те же результаты), и он дал мне ненулевой результат.Таким образом, я думаю, что есть проблема с импортом библиотек, использующих subprocess.Обратите внимание, что я могу запустить этот код R напрямую, и с моим кодом / библиотекой все в порядке.Пожалуйста, дайте мне несколько советов о том, что здесь может пойти не так ...

1 Ответ

0 голосов
/ 30 мая 2019

Извините, мой первоначальный ответ был совершенно неверным.

Ваш вызов подпроцесса:

subprocess.call(["/usr/bin/Rscript", "--vanilla", "script.R"])

вернет число - это код завершения процесса. Если это успешно, без ошибок, это должно быть ноль. Вы можете проверить это, чтобы убедиться, что ваш код R работает правильно.

Вы пытались запустить R-код напрямую? Это производит output.csv? И если да, то производит ли он его в нужном месте?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...