首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如果使用subprocess.Popen运行另一个脚本,则Python会两次打开一个文件

当使用subprocess.Popen在Python中运行另一个脚本时,可能会导致文件被打开两次的情况。这是因为subprocess.Popen创建了一个新的进程来执行另一个脚本,而在这个新的进程中,Python解释器会再次打开并执行被调用的脚本。

这种情况下,可以通过在被调用的脚本中添加条件判断来避免重复打开文件。可以使用if __name__ == '__main__':来判断当前脚本是否作为主程序直接执行,如果是,则执行相应的代码,如果是被其他脚本调用,则不执行。

例如,被调用的脚本为"script2.py",可以在该脚本中添加以下代码:

代码语言:python
代码运行次数:0
复制
if __name__ == '__main__':
    # 执行需要在主程序中执行的代码
    # ...

这样,在使用subprocess.Popen调用"script2.py"时,被调用的脚本中的代码只会在主程序中执行一次,避免了重复打开文件的问题。

需要注意的是,这种方法只适用于被调用的脚本是作为模块导入的情况,如果被调用的脚本是直接通过命令行执行的,则无法避免重复打开文件的情况。

相关搜索:使用python连续读取/监视串行端口(如果端口未打开,则继续运行脚本)使用os从另一个Python脚本运行.py文件在另一个脚本中使用argparse运行python脚本创建一个脚本搜索一个文件,如果找到,则读取该文件。python 3.5使用另一个python脚本中的参数运行脚本检查 file.html 是否存在的脚本,如果存在,则运行另一个脚本,否则会死吗?在一个python脚本中使用另一个python脚本的输出.csv文件如果从另一个目录运行,是否找不到Python - image文件?如何运行使用另一个Kotlin文件的Kotlin脚本?如果从另一个文件夹执行模块,则python 3.6无法解析导入如果字符串位于另一个文件的Python列表中,则移除对象在Spyder中,如何从项目文件夹中的另一个脚本运行python脚本如何关闭一个进程(文件),如果它是由外部程序打开,使用Python?使用带有参数/条目的tkinter按钮打开另一个python文件如何使用另一个ppython脚本运行python脚本(托管在不同的服务器上)?如果json包含Python中的某个单词,则过滤该json并将其保存到另一个文件如何在kivy中使用屏幕管理器在另一个python文件中运行python文件?Python :如果键匹配,则使用另一个字典中的值更新字典中的数组Python使用循环比较两个列表,如果找到匹配,则运行几个代码,然后返回到循环以测试是否存在另一个匹配如果工作簿是由另一个工作簿的宏打开的,则Workbook_Open中的ExcelAnt加载项将无法运行
相关搜索:
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Python 自动化指南(繁琐工作自动化)第二版:十七、计时、安排任务和启动程序

如果你想从你的 Python 脚本中启动一个外部程序,将程序的文件名传递给subprocess.Popen()。(在 Windows 上,右击应用的开始菜单项,选择属性查看应用的文件名。...注 与mspaint.exe不同,如果在 Windows 10 上使用subprocess.Popen()运行calc.exe,你注意到wait()即时返回,即使计算器应用仍在运行。...大多数具有图形用户界面(GUI)的应用不像基于命令行或基于终端的程序那样广泛使用命令行参数。但是大多数 GUI 应用接受一个文件的单个参数,应用在启动时会立即打开这个文件。...运行其他 Python 脚本 您可以像任何其他应用一样从 Python 启动 Python 脚本。简单地将python.exe可执行文件传递给Popen()的文件名。...用默认应用打开文件 双击.txt文件自动启动与.txt文件扩展名相关的应用。您的计算机已经设置了几个这样的文件扩展名关联。Python 也可以用Popen()这样打开文件

2.7K20

pyinstaller打包成无控制台程序时运行出错(与popen冲突的解决方法)

有一天,我把使用了os.popen方法的python程序用pyinstaller打包成exe(用了无控制台打包参数-w) 双击运行时程序却弹框报错! ?...我就有点纳闷:为什么有控制台打包出来的exe(不使用-w参数)可以运行使用-w参数(无控制台)打包的却不能运行呢?...如果是PIPE,表示需要创建一个新的管道,如果是 None,不会做任何重定向工作,子进程的文件描述符继承父进程的。...注意,即使你只在env里定义了某一个环境变量的值,也阻止子程序得到其他的父进程的环境变量(也就是说,如果env里只有1项,那么子进程的环境变量就 只有1个了)。...这个简单的封装,改成使用subprocess.popen,接着将subprocess.popen打开管道的输入值(stdin)重定向,即可解决问题!

3.8K30
  • Python子进程subpocess原理及用法解析

    python的子进程嘛,就是利用python打开一个子进程(当然像是一句废话),但是可能和我们理解的不太一样。 一:如何理解?...我们可能的理解:多开一个进程运行某个python函数(如果只想实现这个功能,请使用multiprocessing包) 正确的理解:python通过shell/cmd 打开一个新的程序进程,而不限于python...函数,比如我们可以开一个“ls”指令的进程列出当前文件夹下的文件,这个“ls”指令明显是一个shell通用函数,而不是python 函数: # 打开子进程运行“ls”。...输出当前文件夹下文件<br data-filtered=”filtered” import subprocess p = subprocess.run([“ls”]) 二. 如何使用?...当我们想单纯地利用subprocess打开一个进程运行python函数的时候,我们甚至要迂回地去做: 比方说这样: (1)新建一个需要运行的函数脚本 test_print.py import sys def

    93910

    python执行系统命令的方法

    做为系统工程师来说,经常会用到python脚本去调用一下系统命令,现把经常使用的集中调用方法总结如下: 一,os.system(command) 在一个子shell中运行command命令,并返回...hsperfdata_root  supervisor.sock  tmp_fifo >>> print code 0 二,os.popen(command[, mode[, bufsize]]) 打开一个与...command进程之间的管道,函数的返回值是一个连接到管道的文件对象,故可以对文件做读写操作(由mode决定rw,mode默认是’r',)。...如果mode为’r',可以使用此函数的返回值调用read()来获取command命令的执行结果。...一个进程的输出作为另一个进程的输入 >>> f = subprocess.Popen('ls -l',shell=True,stdout=subprocess.PIPE) >>> p = subprocess.Popen

    3.9K20

    Python脚本中调用Java程序时Classpath错误

    问题背景一位用户正在使用Python脚本运行Java程序,由于脚本执行时间较长,他希望并行运行多个脚本。...为了不混淆输入文件和临时结果文件,用户在包含脚本文件夹内创建了一个文件夹。他将代码更新为:x = 'java -cp "../lib/*:esalib.jar" .....JVM是运行Java程序所需的软件环境。如果尚未安装JVM,可以从Java官方网站下载并安装。确保Python脚本的编码正确。用户需要确保Python脚本的编码正确。...如果脚本的编码不正确,可能导致Java程序无法正常运行。...在Linux系统上,可以使用以下命令将Python脚本设置为可执行:chmod +x 用户可以尝试重新运行Python脚本,看看错误是否已解决。

    10410

    Python自动重新加载模块详解(autoreload module)

    守护进程模式 使用python开发后台服务程序的时候,每次修改代码之后都需要重启服务才能生效比较麻烦。...看了一下Python开源的Web框架(Django、Flask等)都有自己的自动加载模块功能(autoreload.py),都是通过subprocess模式创建子进程,主进程作为守护进程,子进程中一个线程负责检测文件是否发生变化...,如果发生变化退出,主进程检查子进程的退出码(exist code)如果与约定的退出码一致,重新启动一个子进程继续工作。...使用守护进程模式,有一种情况比较麻烦:如果主进程由于其他原因退出了,那么子进程还在运行: promissing@ubuntu:~$ kill 11742 promissing@ubuntu:~$ ps...has changed. [12424]Stop subprocess:12425 另一个控制台执行的命令如下: promissing@ubuntu:~$ ps -aux|grep runner[.py

    2.8K20

    Python 执行系统命令

    system函数可以将字符串转化成命令在服务器上运行;其原理是每一条system函数执行时,其创建一个子进程在系统上执行命令行,子进程的执行结果无法影响主进程。...在一些复杂场景中,我们需要将一个进程的执行输出作为另一个进程的输入。在另一些场景中,我们需要先进入到某个输入环境,然后再执行一系列的指令等。...如果env=None,默认从父进程继承环境变量 universal_newlines 不同系统的的换行符不同,当该参数设定为true时,表示使用\n作为换行符。...7、Popen.stdin:如果在创建Popen对象是,参数stdin被设置为PIPE,Popen.stdin将返回一个文件对象用于策子进程发送指令。否则返回None。...如果 args是一个字符串,该字符串指定要通过shell执行的命令。

    1.7K10

    Python调用linux系统命令--使

    python 中调用系统命令,如果使用subprocess.Popen() 模块,按照命令参数的的形式,可以分两种: 把命令当作字符串传给subprocess.Popen()  把命令保存到一个元组,...如果args是一个元组或列表形式,序列的第一个元素就是命令的可执行文件。也可以使用executable 显式地指定可执行文件的路径。 stdin, stdout, stderr :用于和外部进行通信。...Popen.poll() : 检查子进程的状态,如果是None 正在运行如果是0 退出,如果是-N 异常退出。 Popen.wait() : 等待进程结束,并获得返回码。...'ls  -l' 命令的另一个参数路径名,通过communicat('/tmp') 传入,结果通过元组(outstd, outerr) 接收。 4.  ...多条命令连通:      在linux 下,经常使用管道将多条命令连在一起,前一条指令的执行结果作为后一条指令的输入,使用Popen 也可以实现。 ? 首先,查看test.txt 文件的内容。

    5.1K20

    解决Python执行命令时路径空格引发的困扰

    在编程实践中,常常需要通过Python执行系统命令,这包括调用外部程序、脚本或是其他命令行工具。然而,一个看似简单却常被忽视的细节——文件路径中的空格,可能导致程序意外崩溃或行为异常。...假设你有一个位于C:\Program FilesMyApp\app.exe的程序需要通过Python启动。如果你直接将这个路径硬编码进你的Python脚本,很可能遇到错误。...解决方案二:转义空格字符另一个方法是在空格前加上转义字符。...高级技巧:使用subprocess模块运行命令对于更复杂的命令执行需求,Python提供了一个强大的subprocess模块。它不仅允许你执行命令,还允许你控制输入/输出流,甚至与子进程进行交互。...最佳实践:预防路径空格问题的建议尽可能避免在文件路径中包含空格。如果可能的话,选择不包含空格的文件夹名称。总是使用os.path.join()或类似的方法来构建文件路径,而不是手动拼接字符串。

    19510

    python之调用系统命令 原

    一、python中执行cmd 目前我使用到的python中执行cmd的方式有三种 使用os.system("cmd") 该方法在调用完shell脚本后,返回一个16位的二进制数,低位为杀死所调用脚本的信号号码...,高位为脚本的退出状态码,即脚本中“exit 1”的代码执行后,os.system函数返回值的高位数则是1,如果低位数是0的情况下,函数的返回值是0×100,换算为10进制得到256。...使用前需要from subprocess import Popen, PIPE。但是Popen函数有一个缺陷,就是它是一个阻塞的方法。如果运行cmd时产生的内容非常多,函数非常容易阻塞住。...操作 说明 备注 execl(path) 运行一个程序来替代当前进程,阻塞式运行 _exit(n) 退出程序 startfile(filename) 用与文件关联的程序运行,关联程序打开后,立即返回...system(cmd) 运行一个程序或命令,立即返回,并在cmd执行完成后,返回cmd退出代码 os.path 在不同的操作系统中调用不同的模块,是一个可import的模块,这个模块中提供很多有用的操作

    2.2K40

    python的subprocess模块

    通常情况下,退出状态码为0表示进程成功运行了;一个负值-N表示这个子进程被信号N终止了 ​ stdout: 从子进程捕获的stdout。...这通常是一个字节序列,如果run()函数被调用时指定 ​ ​universal_newlines=True,该属性值是一个字符串。...subprocess.Popen(): 在一些复杂场景中,我们需要将一个进程的执行输出作为另一个进程的输入。在另一些场景中,我们需要先进入到某个输入环境,然后再执行一系列的指令等。...如果env=None,默认从父进程继承环境变量 universal_newlines:不同系统的的换行符不同,当该参数设定为true时,表示使用\n作为换行符 示例1,在/root下创建一个suprocesstest...shtin来实现 以下实现打开python3的终端,执行一个print命令 ​ proc = subprocess.Popen(['python3'],stdin=subprocess.PIPE,stdout

    3K20

    【愚公系列】2021年12月 Python教学课程 26-系统编程

    使用 os 模块: import os 在使用 os 模块的时候,如果出现了问题,抛出 OSError 异常,表明无效的路径名或 文件名,或者路径名(文件名)无法访问,或者当前操作系统不支持该操作等...os.defpath 当使用 exec 函数族的时候,如果没有指定 PATH 环境变量,默认查找 os.defpath 中的值作为子进程 PATH 的值。 使用范例: 2....如果可选参数 onerror 被指定, onerror 必须是一个函数,该函数有一个 OSError 实例的参数,这样可以允许在运行的时候即使出现错误的时候不会打断 os.walk()的执行,或者抛出一个异常并终止...其值可以是subprocess.PIPE、subprocess.DEVNULL、一个已经存在的文件描述符、已经打开文件对象或者 None。subprocess.PIPE 表示为子进程创建新的管道。...如果你在调用run()方法时,设置了参数 stderr=subprocess.STDOUT,错误信息和 stdout 一起输出,此时 stderr 的值是 None。

    88320

    python执行系统命令

    python3中,推荐使用subprocess模块来执行系统命令,基本用法如下 # 导入模块>>> import subprocess# 执行系统命令 wc-l>>> cmd = subprocess.run...(['ls','-l'])# 运行状态,运行成功返回0>>> cmd.returncode0 上述代码中通过一个列表来记录执行的命令,软件名称,选项,参数等都对应列表中的一个元素。...否则程序认为第一个参数是一个文件路径,找不到该路径,然后报错 >>> cmd = subprocess.run('ls -l')Traceback (most recent call last):...另外,还支持限定执行时间,如果超时,报错,写法如下 >>> cmd = subprocess.run('ls -l', shell = True, timeout = 100) time参数的单位为秒...控制标准输入的经典使用场景是运行交互式的命令,用法如下 >>> import subprocess# stdin 控制标准输入流# stdout 控制标准输出流>>> s = subprocess.Popen

    1.7K10

    PostgreSQL 通过PYTHON 程序查看PG 配置服务运行情况

    机器多,问题多,就两双手,所以程序如果可以解决60-80%的问题,至少工作轻松一些。理论一堆,但处理问题疲软就尴尬了。...下面就是一段通过 python 来查看postgresql 单机情况的脚本,初学水平。 基于PYTHON3 以及 psycopg2 的组件来访问PG。...另外如果是编译安装的postgresql ,需要将libpg.so.5 文件拷贝到/usr/lib 和 usr/lib64 中, 否则加载程序时容易报错。...整体代码的目的 1 判断当前服务器上是否有PG的数据正在运行如果没有程序退出 2 判断当前PG服务器上运行的子进程是否齐全,如果不齐全会打印缺少的子进程服务 3 将主要的PG的一些配置参数打印...4 当前PG的工作的进程数,和最慢的SQL运行的时间 (功能简单,后续可以在进行添加),代码运行python 3环境下 #!

    79820

    Python os.popen() 方法

    概述 os.popen() 方法用于从一个命令打开一个管道。...负的bufsize意味着使用系统的默认值,一般来说,对于tty设备,它是行缓冲;对于其它文件,它是全缓冲。如果没有改参数,使用系统的默认值。...返回值 返回一个文件描述符号为fd的打开文件对象 实例 以下实例演示了 popen() 方法的使用: #!...,os.system函数返回值的高位数则是1,如果低位数是0的情况下,函数的返回值是0x0100,换算为十进制得到256。...代码实例2: 使用os.popen执行sqlplus命令对数据库进行操作的场景,如果sqlplus执行失败,进入交互模式,如图所示,此时使用readlines()读取执行结果时也会卡死,效果如上图:

    14.5K21

    使用 python 执行 shell 命令的几种常用方式

    使用 Python 编写自动化脚本的时候,难免需要执行一些基本的 shell 命令,而 Python 执行 shell 命令的方式有好几种,如果根据需要选择最适合的方式显得非常重要,这篇文章就来总结和对比一下几种常见的...Python 运行 shell 命令的方式。...方法二:os.popen() os.popen() 方法执行命令之后会把成功执行的命令的结果以文件的形式返回,所以可以通过 read() 方法获取执行的结果,而如果执行失败,文件为空,所以这个方法的适用场景是命令返回的结果比较多...,第一个结果是状态码,第二个是输出结果的字符串格式,所以如果想要在提取执行结果的同时获取到执行的成功与否,则可以直接使用这个方法。...我的建议是当执行的命令比较简单而且也不是经常调用的时候,可以直接使用 os.system(),而如果是需要把执行命令的方法写到函数中经常性的调用,则应该使用 subprocess.Popen() 这种更加高级的方法

    3.2K10
    领券