#python #python-3.x #multithreading #subprocess #python-multithreading
#питон #python-3.x #многопоточность #подпроцесс #python-многопоточность
Вопрос:
Я хочу запустить несколько команд в моей ОС liunx, поэтому я создаю скрипт для запуска нескольких команд, но выполнение некоторых команд занимает слишком много времени, но я хочу завершить выполнение команд, выполнение которых занимает более 1 минуты. Как я могу это сделать?
import subprocess
import threading
import time
from time import sleep
def prog(line):
def worker(line):
print(line)
subprocess.call(line, shell=True )
t = threading.Thread(target=worker, args=(line,))
t.start()
f=open("a",'r')
for line in f:
prog(line)
Ответ №1:
subprocess.call
имеет timeout
параметр.
Он завершает выполнение команды после заданного времени ожидания (в секундах) и вызывает TimeoutExpired
.
import subprocess
import threading
def prog(line):
def worker(line):
print(line)
try:
subprocess.call(line, shell=True, timeout=60)
except subprocess.TimeoutExpired as e:
print(e)
t = threading.Thread(target=worker, args=(line,))
t.start()
f=open("a",'r')
for line in f:
prog(line)
Вот минимальный пример, который можно выполнить: https://ideone.com/ZToaJU
Еще один совет, хотя и не запрошенный: вам не нужно переходить args=(line,)
к рабочей функции. Поскольку она объявлена как вложенная функция, у нее уже есть доступ к line
переменной prog
:
import subprocess
import threading
def prog(line):
def worker():
print(line)
try:
subprocess.call(line, shell=True, timeout=60)
except subprocess.TimeoutExpired as e:
print(e)
t = threading.Thread(target=worker)
t.start()
f=open("a",'r')
for line in f:
prog(line)
Комментарии:
1. это не очень подробное описание ошибки.
2. я хочу запустить такую команду, но отображается ошибка
3. Вы все еще не сказали, в чем ошибка. Извините, но было бы действительно полезно, если бы вы предоставили некоторую информацию.
4. Просто посмотрите на свой собственный комментарий: «python ss.py -u url.target». Я не знаю, что ‘ss.py то есть я не знаю, зачем вы добавляете «-u», каким должен быть «url.target» и что говорится в сообщении об ошибке. Как я должен вам помочь?
5. какой-то скрипт уже был кем-то написан, но я не хочу ничего менять в скрипте, но я хочу автоматически запускать этот скрипт через другой файл python.