扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
import os
我们提供的服务有:成都网站建设、做网站、微信公众号开发、网站优化、网站认证、雨湖ssl等。为上千企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的雨湖网站制作公司
#打开图片
os.startfile(r'D:\新建.png')
#打开txt文件
os.startfile(r'D:\新建文本文档.txt')
#打开exe文件
os.startfile(r'D:\360DrvMgrInstaller_beta.exe')
"""startfile命令里只需输入文件的路径即可"""
进阶用法
官方解释os.startfile函数有两个参数
os.startfile(path[, operation])
path指的是文件路径,有意思的是operation参数,
当 operation 未指定或指定为 'open' 时,通过扩展名相关联的应用程序(如果有)打开文件。
当指定另一个 operation 时,它必须是一个“命令动词” (“command verb”),该词指定对文件执行的操作。文档中的常用动词有 'print' 和 'edit' (用于文件),以及 'explore' 和 'find' (用于目录)。
可以使用一个标志变量来控制程序的启动和结束。
首先,在主程序中设置一个标志变量,例如 running,用于指示程序是否处于运行状态。在程序开始时,running 应设置为 False。
然后,在每次循环中检查 running 的值。如果 running 为 True,则执行 auto() 函数;如果 running 为 False,则等待用户输入命令。
当用户输入 qd 命令时,将 running 设置为 True,并执行 auto() 函数。当用户输入 tz 命令时,将 running 设置为 False,并执行 reset() 函数。
示例代码如下:
running
running = False
while True:
cmd = input("请输入命令:")
if cmd == 'qd':
running = True
elif cmd == 'tz':
running = False
if running:
auto()
else:
reset()
在这段代码中,我们使用了一个 while 循环来不断接收用户的命令。在每次循环中,我们会读入用户的命令,并根据命令的不同设置 running 的值。如果 running 为 True,则执行 auto() 函数;如果 running 为 False,则执行 reset() 函数。
这样,用户就可以随时输入 tz 命令来停止程序,也可以输入 qd 命令来重新启动程序。
希望这些信息能够帮助您。
任何一种编程语言,启动进程和关闭进程都是跟操作系统相关的操作,python中与操作系统打交道的话,推荐使用os模块。
os.system() 函数可以启动一个进程,执行完之后返回状态码。
os.fork() 复制一个进程,如果是子进程返回0,如果是父进程返回子进程的pid,使用这个函数的时候,建议你学习一下linux编程的知识。
os.popen 以管道的方式创建进程。
os.spawnl 也可以创建进程,并能指定环境变量。
os.kill(pid, sig) 关闭一个进程,pid是进程号,sig是信号。与fork配合使用,例如你刚才用fork创建了一个子进程,它的pid是11990, 那么调用
os.kill( 11990, signal.CTRL_BREAK_EVENT)
就以ctrl+c的方式杀死了这个进程。
另外还有一个模块multiprocessing,这个模块封装了很多创建进程和进程间通信的操作,可以让你发挥多核的威力。
在Python中,我们通过标准库中的subprocess包来fork一个子进程,并运行一个外部的程序。
使用subprocess包中的函数创建子进程的时候,要注意:
1) 在创建子进程之后,父进程是否暂停,并等待子进程运行。
2) 函数返回什么
3) 当returncode不为0时,父进程如何处理。
subprocess.call()
父进程等待子进程完成
返回退出信息
subprocess.check_call()
父进程等待子进程完成
返回0
检查退出信息,如果returncode不为0,则举出错误subprocess.CalledProcessError,该对象包含有returncode属性,可用try...except...来检查。
subprocess.check_output()
父进程等待子进程完成
返回子进程向标准输出的输出结果
检查退出信息,如果returncode不为0,则举出错误subprocess.CalledProcessError,该对象包含有returncode属性和output属性,output属性为标准输出的输出结果,可用try...except...来检查。
这三个函数的使用方法相类似,我们以subprocess.call()来说明:
import subprocess
rc = subprocess.call(["ls","-l"])
实际上,我们上面的三个函数都是基于Popen()的封装(wrapper)。这些封装的目的在于让我们容易使用子进程。当我们想要更个性化我们的需求的时候,就要转向Popen类,该类生成的对象用来代表子进程。
与上面的封装不同,Popen对象创建后,主程序不会自动等待子进程完成。我们必须调用对象的wait()方法,父进程才会等待 (也就是阻塞block):
import subprocess
child = subprocess.Popen(["ping","-c","5",""])
child.wait()
print("parent process")
此外,你还可以在父进程中对子进程进行其它操作,比如我们上面例子中的child对象:
child.poll() # 检查子进程状态
child.kill() # 终止子进程
child.send_signal() # 向子进程发送信号
child.terminate() # 终止子进程
因此,如果不希望当前进程被阻塞,你可以使用Popen对象进行操作。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流