Возможно ли сохранить исходные сценарии оболочки, когда я выхожу из сценария python? [Дубликат]

Я также столкнулся с той же проблемой, и

remove.packages(c("ggplot2", "data.table"))
install.packages('Rcpp', dependencies = TRUE)
install.packages('ggplot2', dependencies = TRUE)

эти команды не сработали для меня. Я обнаружил, что он показывал предупреждающее сообщение о том, что он не мог перемещать временную установку C:\Users\User_name\Documents\R\win-library\3.3\abcd1234\Rcpp в C:\Users\User_name\Documents\R\win-library\3.3\Rcpp.

Я загрузил zip-файл Rcpp из указанной ссылки и разархивировал ее и скопировал ее внутри C:\Users\User_name\Documents\R\win-library\3.3, а затем

library(Rcpp)
library(ggplot2) 

. Мне не нужно было удалять R. Надеюсь, это поможет.

18
задан grieve 4 November 2008 в 20:08
поделиться

3 ответа

Ни один процесс не может изменить свой родительский процесс (или любую другую существующую среду процесса).

Однако вы можете создать новую среду, создав новую интерактивную оболочку с измененной средой.

Вы должны создать новую копию оболочки, которая использует обновленную среду, и имеет доступ к существующим stdin, stdout и stderr, и делает свой танец повторной инициализации.

Вам нужно сделать что-то вроде использовать subprocess.Popen для запуска /bin/bash -i.

Таким образом, исходная оболочка запускает Python, который запускает новую оболочку. Да, у вас много процессов. Нет, это не так уж плохо, потому что исходная оболочка и Python на самом деле ничего не делают, кроме как ждать завершения работы подоболочки, чтобы они могли выйти также чисто.

17
ответ дан tzot 18 August 2018 в 02:01
поделиться
  • 1
    Да, это то, что я сейчас делаю. Я пытался избежать танец повторной инициализации. – grieve 4 November 2008 в 22:34
  • 2
    Я отредактировал сообщение, фиксирующее некоторые незначительные опечатки, и добавил комментарий в скобках (вы можете удалить его, если не согласны) – tzot 5 November 2008 в 12:44
  • 3
    Изменение "существующего" process - while true - тангенциально. Изменение родительского процесса - это то, что смущает всех; людям непонятно, что все * nix-команды запущены в подпроцессе. – S.Lott 5 November 2008 в 12:56

Я бы использовал инструкцию bash eval и вывел скрипт python код оболочки

child.py:

#!/usr/bin/env python
print 'FOO="A_Value"'

parent.sh

#!/bin/bash
eval `./child.py`
11
ответ дан JimB 18 August 2018 в 02:01
поделиться

Для любого дочернего процесса невозможно изменить среду родительского процесса. Лучшее, что вы можете сделать, это вывести инструкции оболочки в stdout, которые вы затем используете, или записать в файл, который вы используете в родительском.

13
ответ дан Martin v. Löwis 18 August 2018 в 02:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: