我编写了一个程序,它通过subprocess
库从自身调用另一个程序,然后通过sys.exit()
终止自己。在
但并不是那么简单。应该有一个问题清单。(注意,这不是关于脚本本身,而是关于通过pyinstaller创建的脚本的应用程序)
APPDATA\Local\test
os.remove(o)
未执行path + f'\\{k}.txt'
只保存在APPDATA\Local\test
,而{显然,程序根本不是从appdata开始的,但事实并非如此,因为在任务管理器中,它会显示两次。这种行为的原因是什么?怎么解决呢?在
UPD:我确保文件只保存在upadte中,在else:
之后写入os.chdir(path)
。但第一次处决仍然无法完成。在
import sys
import os
import time
path = os.path.dirname(os.getenv('APPDATA')) + '\\Local\\test'
try:
os.mkdir(path)
except OSError:
pass
if not os.path.isfile(path + '\\test.exe'):
with open(path + '\\info.txt', 'w', encoding='utf-8') as f:
f.write(sys.argv[0])
subprocess.call(['copy', sys.argv[0], path + '\\test.exe'], shell=True)
subprocess.call(path + '\\test.exe', shell=True)
sys.exit()
else:
with open(path + '\\info.txt', 'r', encoding='utf-8') as f:
o = f.readline()
if os.path.isfile(o):
try:
os.remove(o)
except:
pass
k = 0
while True:
time.sleep(5)
with open(path + f'\\{k}.txt', 'w', encoding='utf-8') as f:
f.write('test message 1')
with open(f'{k}test.txt', 'w', encoding='utf-8') as f:
f.write('test message 2')
k += 1
我通过taskkill解决了这个问题。因此,
else
后面的代码如下所示:在这样做的时候,为了正确地终止进程,我将两个程序的名称改为不同的名称。在
首先,你问了很多彼此无关的问题。第二,我不知道你们想在这里实现什么,但我将给你们一个简短的答案。在
使用PyInstaller(带有-F标志)创建的应用程序部署两个进程。一个用于提取可执行文件的内容并在代码执行后进行清理,第二个是程序本身。另外,您使用
subprocess
调用可执行文件,因此它将变成4个进程。创建可执行文件后,
sys.argv[0]
将等于可执行文件本身的路径。{t>因此不能调用cd3}。我不确定这个问题,但是}将被转换为可执行文件所在的当前可执行路径。
os.path.dirname(os.getenv('APPDATA'))
将被转换为用户的AppData路径,但是{相关问题 更多 >
编程相关推荐