Используя подпроцесс для запущения скрипта Python в Windows

ОП упоминает функцию map в Python. Эта функция фактически применяет функцию к каждому элементу списка (или повторяемого) и возвращает список (или повторяемый), который собирает все результаты. Другими словами, он делает что-то вроде этого:

def f( x ) : 
   """ a function that computes something with x"""
   # code here 
   return y 

input = [ x1, x2, x3, ... ]
output = map( func, input )  

# output is  now [ f(x1), f(x2), f(x3), ...] 

Следовательно, ближайшая стандартная библиотека C ++, эквивалентная карте Python, на самом деле std::transform (из заголовка). 117]

Пример использования выглядит следующим образом:

#include 
#include  
using namespace std;

double f( int x ) { 
   // a function that computes the square of x divided by 2.0 
   return x * x / 2.0 ;
}

int main( ) {
  vector input{ 1, 5, 10 , 20};
  vector output;
  output.resize( input.size() ); // unfortunately this is necessary

  std::transform( input.begin(), input.end(), output.begin(), f );

  // output now contains  { f(1), f(5), f(10), f(20) }
  //                     = { 0.5, 12.5,  50.0, 200.0 } 
  return 0;
}   

39
задан Community 23 May 2017 в 12:10
поделиться

5 ответов

Только что найдено sys.executable - полный путь к текущему исполняемому файлу Python, который можно использовать для запуска сценария (вместо использования команды shbang, которая, очевидно, не не работает в Windows)

import sys
import subprocess

theproc = subprocess.Popen([sys.executable, "myscript.py"])
theproc.communicate()
61
ответ дан 27 November 2019 в 02:17
поделиться

Похоже, Windows пытается запустить скрипт, используя свою собственную среду EXE, а не называть его как

python /the/script.py

Попробуйте,

subprocess.Popen(["python", "/the/script.py"])

Изменить: "python" должен быть на вашем пути.

4
ответ дан 27 November 2019 в 02:17
поделиться

Когда вы запускаете скрипт python в Windows в подпроцессе, вы должны использовать python перед именем скрипта. Попробуйте:

process = subprocess.Popen("python /the/script.py")
1
ответ дан 27 November 2019 в 02:17
поделиться

Вы используете разделитель путей, который зависит от платформы. Windows использует "\", а Unix использует "/".

2
ответ дан 27 November 2019 в 02:17
поделиться

Как насчет этого:

import sys
import subprocess

theproc = subprocess.Popen("myscript.py", shell = True)
theproc.communicate()                   # ^^^^^^^^^^^^

Это говорит подпроцессу использовать оболочку ОС для открытия вашего скрипта и работает со всем, что вы можете просто запустить в cmd.exe.

Кроме того, в PATH будет выполняться поиск «myscript.py», что может быть желательно.

21
ответ дан 27 November 2019 в 02:17
поделиться
Другие вопросы по тегам:

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