2017-02-11 4 views
1

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

#!/bin/env python 
import sys 
import subprocess 
print sys.path 
process = subprocess.Popen('/home/pi/test2.py', shell=True, stdout=subprocess.PIPE) 

Второй сценарий:

#!/bin/env python 
import sys 
i=1 
print sys.path 
while i<50: 
    print i 
    i=i+1 

Основной сценарий завершается без ошибок, но это выглядит как второй даже не запускается. Зачем?

+0

Зачем вам нужны два цикла, которые работают одновременно? Пожалуйста, объясните, что вы на самом деле _goal_. Благодаря! –

+0

Мне нужно получить данные измерений от датчиков (= длительность входного сигнала) - это означает, что сценарий просто ждет около 30 мс для остановки входного сигнала. в то же время я должен выводить сигналы 1 мс каждые 20 мс для управления двигателем. - Вы знаете лучшее решение? – xHascox

ответ

1

Если вы хотите увидеть результат test2.py, то вы не должны указывать stdout=subprocess.PIPE. Это собирает стандарт и позволяет получить к нему доступ через объект process.

Кроме того, для чего это стоит, shell=True - это не очень хорошая идея, если вы не уверены, что вам это нужно.

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

subprocess.Popen(['/home/pi/test2.py']) 
+0

process = subprocess.Popen ('/ home/pi/test2.py'), как это? то я получаю ошибку Нет такого файла или каталога – xHascox

+0

@xHascox Есть ли файл и он является исполняемым/ –

+0

Я так думаю, что я не использовал для linux и python, что много - если я его открываю вручную и запускаю, он работает. – xHascox

0

Добавление sigmavirus24s ответа. Если вы не установили shell=True, вам необходимо передать аргументы в виде списка ['/home/pi/test2.py'] и передать это как первый аргумент. Для многих аргументов используйте shlex модули split, которые разбивают string на список аргументов для вас.

Редактировать: Чтобы скрипт работал, вам необходимо передать ['python', '/home/pi/test2.py'] в качестве аргумента. Это говорит python для запуска скрипта.

+0

subprocess.Popen (['/ home/pi/test2.py']) приводит к ошибке 2 нет такого файла или каталога – xHascox

+0

Вместо '['/home/pi/test2.py']' use '['python' , '/home/pi/test2.py'] '. Это работает для меня – s0hvaperuna

+0

Я не получаю никаких ошибок, даже если тип пути - полная глупость, но test2.py не запускается. – xHascox

Смежные вопросы