программа выполняется определенный период времени с использованием thread () и subprocess ()

#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.