“Subprocess.call” não funciona. mensagem de erro: “[WinError 193]% 1 não é um aplicativo Win32 válido” [duplicado]
Nov 25 2020
meu script tem que abrir diferentes tipos de scripts (.exe, .py, .c, etc.) e para atingir esse objetivo utilizo estas duas instruções:
os.chdir(FOLDER_PATH)
os.system("start "+SCRIPT_NAME)
o código funciona, mas mostra a janela do console sempre que os.system("start "+SCRIPT_NAME)
é usado. para esconder, li na internet que tenho que usar o subprocess
módulo. Tentei usar esses comandos, mas eles não funcionam:
C:\test
λ ls -l
total 16
-rw-r--r-- 1 Admin 197121 13721 Oct 19 00:44 test.py
C:\test
λ python
Python 3.8.3 (tags/v3.8.3:6f8c832, May 13 2020, 22:20:19) [MSC v.1925 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> import subprocess
>>> from subprocess import CREATE_NO_WINDOW
>>>
>>> subprocess.call("test.py", creationflags=CREATE_NO_WINDOW)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Users\Admin\AppData\Local\Programs\Python\Python38-32\lib\subprocess.py", line 340, in call
with Popen(*popenargs, **kwargs) as p:
File "C:\Users\Admin\AppData\Local\Programs\Python\Python38-32\lib\subprocess.py", line 854, in __init__
self._execute_child(args, executable, preexec_fn, close_fds,
File "C:\Users\Admin\AppData\Local\Programs\Python\Python38-32\lib\subprocess.py", line 1307, in _execute_child
hp, ht, pid, tid = _winapi.CreateProcess(executable, args,
OSError: [WinError 193] %1 is not a valid Win32 application
>>>
como posso resolver o problema?
Respostas
Doyousketch2 Nov 26 2020 at 00:19
Você pode usar call()
, mas run()
deve ser uma versão mais recente e mais robusta.https://docs.python.org/3/library/subprocess.html Use o sabor que desejar, desde que atinja seus objetivos.
#! /usr/bin/env python3
import subprocess as sp
cmd = ['echo', 'hi'] ## separate args in list. safer this way
response = sp .run( cmd, stdout=sp.PIPE, stderr=sp.PIPE, encoding='utf-8', creationflags=sp.CREATE_NO_WINDOW)
print( response.stderr, response.stdout )
cmd = 'echo hi' ## alternate string method
response = sp .run( cmd, stdout=sp.PIPE, stderr=sp.PIPE, shell=True, encoding='utf-8', creationflags=sp.CREATE_NO_WINDOW)
print( response.stderr, response.stdout )
Se você não especificar a codificação, ele retornará cadeias binárias codificadas
O que significa um erro “Não é possível encontrar o símbolo” ou “Não é possível resolver o símbolo”?
George Harrison ficou chateado por suas letras de 'Hurdy Gurdy Man' de Donovan não terem sido usadas