python - os.system() 有效,但 subprocess.popen() 不... FileNotFoundError: [WinError 2] 和 OSError: [WinError 193] 错误
问题描述
当我尝试运行一个简单的子进程行时,我遇到了一个奇怪的错误。我经常在需要程序运行的计算机上收到“OSError:[WinError 193] %1 不是有效的 Win32 应用程序”,即使相同的代码行在另一台计算机上运行以打开随机文本文件. 当我使用 os.system([path]) 时,它可以工作,但我需要代码继续,而不是等待被关闭。这是我得到的一个例子
import subprocess
import os
open = subprocess.Popen('C://Users//z004c50a//Desktop//Thisworksfolder//thisWorks3.txt')
#open = os.system('C://Users//z004c50a//Desktop//Thisworksfolder//thisWorks3.txt')
输出:
使用 os.system 可以工作,但会暂停代码,所以我想使用 subprocess 方法,但这给了我以下错误:
Traceback (most recent call last):
File "C:\Users\z004c50a\Desktop\PythonApplication2\PythonApplication2\PythonApplication2.py", line 4, in <module>
open = subprocess.Popen('C://Users//z004c50a//Desktop//Thisworksfolder//thisWorks3.txt')
File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\subprocess.py", line 800, in __init__
restore_signals, start_new_session)
File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\subprocess.py", line 1207, in _execute_child
startupinfo)
OSError: [WinError 193] %1 is not a valid Win32 application
Press any key to continue . . .
我已经尝试了很多变体stdout = subprocess.pipe, shell = True
,等等。
另一个在其他地方工作而不是在计算机上工作的程序我需要它工作......
///////////////////////////////////////// //////////////////////////////////////
#Iterate through path objects, find all that end with .txt
#This is the intial loop that
for item in p.glob('**/*'):
if item.suffix in (['.txt']):
name = item.name
path = Path.resolve(item).parent
size = item.stat().st_size
modified = datetime.fromtimestamp(item.stat().st_mtime)
files.append(File(name, path, size, modified))
pathName = '"' + str(path) + '\\' + str(name) + '"'
updateFile.write("\n" + pathName)
print(pathName)
open = subprocess.call(pathName) #open the file
#open = os.system(pathName) #open the file
sys.exit()
输出:
"C:\Users\z004c50a\Desktop\ThisWorksfolder\thisWorks3.txt"
Traceback (most recent call last):
File "C:\Users\z004c50a\Desktop\PythonCadMigration\PythonCadMigration\PythonCadMigration.py", line 71, in <module>
open = subprocess.call(pathName) #open the file
File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\subprocess.py", line 339, in call
with Popen(*popenargs, **kwargs) as p:
File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\subprocess.py", line 800, in __init__
restore_signals, start_new_session)
File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\subprocess.py", line 1207, in _execute_child
startupinfo)
OSError: [WinError 193] %1 is not a valid Win32 application
Press any key to continue . . .
///////////////////////////////////////// /////////////////////////////////
当我将 shell 设置为 truesubprocess.Popen('C://Users//z004c50a//Desktop//Thisworksfolder//thisWorks3.txt', shell = True)
时,我收到一个错误FileNotFoundError: [WinError 2]这更奇怪,因为如果我将该路径输入到 cmd 中,它会正常打开,所以我知道该文件在那里。这是一个例子
///////////////////////////////////////// //////////////////////////////////
import subprocess
subprocess.run("dir", shell =True)
输出
Traceback (most recent call last):
File "C:\Users\z004c50a\Desktop\PythonCadMigration\PythonCadMigration\PythonCadMigration.py", line 32, in <module>
subprocess.run("dir", shell =True)
File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\subprocess.py", line 488, in run
with Popen(*popenargs, **kwargs) as process:
File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\subprocess.py", line 800, in __init__
restore_signals, start_new_session)
File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\subprocess.py", line 1207, in _execute_child
startupinfo)
FileNotFoundError: [WinError 2] The system cannot find the file specified
Press any key to continue . . .
///////////////////////////////////////// ///////////////////////////////////
我已经检查了我的路径,不认为这是问题所在,但我非常愿意接受有关该问题的任何帮助。提前致谢
解决方案
我只用过subprocess.Popen
一次,但它的工作。
subprocess.Popen([sys.executable, 'wintest.py'])
看起来第一个arg
接受的应该是第二个索引中包含文件路径的列表。
推荐阅读
- awk - 使用 awk 仅从第一个实例获取信息
- c++ - 将自定义命令行参数传递给 Rust 测试
- python - 如何使用线程将多个 keras 模型加载到 python 字典中?
- java - 如何获取文件夹内所有文件的列表
- java - 如何将 test-project 打包到具有 spring 依赖项的可执行 jar 中?
- macos - 在不使用 Homebrew 或完整 XCode 的情况下在 Mac OS 上安装 FreeRDP
- python - python3.9从函数内部更改全局变量值不起作用
- flutter - 伙计们关于如何在 Flutter(Android)中获取 BluetoothDevice 的硬件地址的任何想法。我正在使用 FlutterBlue
- php - Laravel Cookies 因无效域而被拒绝
- ibm-cloud - IBM Watson Assistant - 如何在 Slots 中使用 input.text