Python &引用;子流程调用";不';不行。错误消息:";[WinError 193]%1不是有效的Win32应用程序;
我的脚本必须打开不同类型的脚本(.exe、.py、.c等),为了实现这一目标,我使用以下两种说明:Python &引用;子流程调用";不';不行。错误消息:";[WinError 193]%1不是有效的Win32应用程序;,python,subprocess,Python,Subprocess,我的脚本必须打开不同类型的脚本(.exe、.py、.c等),为了实现这一目标,我使用以下两种说明: os.chdir(文件夹路径) os.system(“开始”+脚本名称) 代码可以工作,但只要使用os.system(“开始”+SCRIPT\u NAME),它就会显示控制台窗口。为了隐藏它,我在互联网上读到我必须使用子流程模块。我尝试使用这些命令,但它们不起作用: C:\test λ ls -l total 16 -rw-r--r-- 1 Admin 197121 13721 Oct 19 00
os.chdir(文件夹路径)
os.system(“开始”+脚本名称)
os.system(“开始”+SCRIPT\u NAME)
,它就会显示控制台窗口。为了隐藏它,我在互联网上读到我必须使用子流程
模块。我尝试使用这些命令,但它们不起作用:
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
>>>
C:\test
λls-l
总数16
-rw-r--r--1管理员197121 13721 10月19日00:44 test.py
C:\测试
λpython
win32上的Python 3.8.3(tags/v3.8.3:6f8c832,2020年5月13日,22:20:19)[MSC v.1925 32位(英特尔)]
有关详细信息,请键入“帮助”、“版权”、“信用证”或“许可证”。
>>>
>>>导入子流程
>>>从子流程导入创建\u否\u窗口
>>>
>>>subprocess.call(“test.py”,creationflags=CREATE\u NO\u窗口)
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
调用中的第340行文件“C:\Users\Admin\AppData\Local\Programs\Python 38-32\lib\subprocess.py”
将Popen(*popenargs,**kwargs)作为p:
文件“C:\Users\Admin\AppData\Local\Programs\Python38-32\lib\subprocess.py”,第854行,在uu init中__
self.\u execute\u child(参数、可执行文件、预执行文件、关闭文件、,
文件“C:\Users\Admin\AppData\Local\Programs\Python38-32\lib\subprocess.py”,第1307行,在执行子进程中
hp、ht、pid、tid=\u winapi.CreateProcess(可执行文件、参数、,
OSError:[WinError 193]%1不是有效的Win32应用程序
>>>
如何解决这个问题?您可以使用call()
,但是run()
应该是一个更新的版本,而且更健壮。只要它达到了您的目标,就可以使用您喜欢的口味
#! /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 )
如果不指定编码,则返回b‘二进制编码字符串’您可以使用call()
,但是run()
应该是一个更新的版本,并且更健壮。只要它达到您的目标,就可以使用您喜欢的任何风格
#! /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 )
如果您不指定编码,那么它将返回b‘二进制编码字符串’您可以尝试:
子流程调用([“python3”、“test.py”],creationflags=CREATE\u NO\u WINDOW)
?它将返回数字9009
,但不返回其他任何内容。。请参阅为什么%1
是消息的一部分。您可以尝试:子流程调用([“python3”、“test.py”],creationflags=CREATE_NO_WINDOW)
?它会返回编号9009
,但不会返回任何其他内容。请参阅以了解%1
为什么是消息的一部分。