Использование Python для автоматического запуска .exe

У меня есть несколько приложений .exe, которые мне предоставил поставщик датчиков. Они позволяют мне получать данные в определенное время и преобразовывать типы файлов. Но мне нужно запустить их через cmd вручную, и я пытаюсь автоматизировать этот процесс с помощью Python. У меня проблемы с тем, чтобы это работало.

Пока у меня есть:

import sys
import ctypes
import subprocess

def is_admin():
    try:
        return ctypes.windll.shell32.IsUserAnAdmin()
    except:
        return False
if is_admin():
    process = subprocess.Popen('arcfetch C:/reftek/arc_pas *,2,*,20:280:12:00:000,+180', shell=True, cwd="C:/reftek/bin",
                     stdout=subprocess.PIPE, stderr=subprocess.PIPE,)
    out = process.stdout.read()
    err = process.stderr.read()

else:
    # Re-run the program with admin rights
    ctypes.windll.shell32.ShellExecuteW(None, "runas", sys.executable, __file__, None, 1)

Но exe-файл arcfetch не запускался. Кроме того, это требует, чтобы я разрешил Python каждый раз вносить изменения на жесткий диск, что не будет работать автоматически.

Будем очень благодарны любой помощи!


person Esther    schedule 16.10.2020    source источник
comment
CD - это внутренняя команда в cmd.exe. Не могли бы вы объяснить, что вы собираетесь здесь делать "cd", "cd C:/reftek/bin",?   -  person Compo    schedule 17.10.2020
comment
Я пытаюсь перейти в каталог, в котором находится EXE-файл.   -  person Esther    schedule 17.10.2020
comment
Помогает ли вам этот ответ? Каталог изменения подпроцесса   -  person Compo    schedule 17.10.2020
comment
Спасибо! Я изменил код, но, к сожалению, он все еще не работает. Я отредактировал вопрос, чтобы отразить новый код.   -  person Esther    schedule 17.10.2020


Ответы (1)


После некоторой игры и помощи комментариев я смог заставить его работать!

Окончательный код:

import sys
import ctypes
import subprocess

def is_admin():
    try:
        return ctypes.windll.shell32.IsUserAnAdmin()
    except:
        return False
if is_admin():
    subprocess.run('arcfetch C:/reftek/arc_pas *,2,*,20:280:12:00:000,+180', shell=True, check=True, cwd="C:/reftek/bin")

else:
    # Re-run the program with admin rights
    ctypes.windll.shell32.ShellExecuteW(None, "runas", sys.executable, __file__, None, 1)

Изменить: у этого все еще есть проблема с администратором, но я могу изменить настройки безопасности на своем компьютере для этого.

person Esther    schedule 17.10.2020