错误定位 凭借过硬的英语水平,我们明白这个报错是因为访问不到父目录导致 getcwd 出错了。...聪明的童鞋一想就觉得是不是和上面的删除目录有关系,这时候肯定得看看 test_b 是什么内容,说不定能解决我们的疑问: #!...在我们毫无头绪时,可以去喝喝快乐肥宅水,说不定就能脉动回来。 因为我就是这样看到找到线索了:shell-init。...那现在其实一目了然了,system调用了 /bin/sh, 触发shell 初始化了, 在初始化变量时候调用了 get_working_directory,因为获取父目录失败了,所以输出了那段错误。...的源码已经给出 80% 了,他们的区别就是: system = fork + execl + waitpid 而 execl 只是系统 exec 族函数的其中一个,说到 exec 族函数,它们是将新的程序内容替换当前进程内容运行
0时,直接返回输出结果,如果返回值不为0,直接抛出异常。...bufsize:缓冲区大小,可不用关心 stdin,stdout,stderr:分别表示程序的标准输入,标准输出及标准错误 shell:与上面方法中用法相同 cwd:用于设置子进程的当前目录 env:用于指定子进程的环境变量...看下面例子 proc = subprocess.Popen('ls -l', shell=True, stdout=subprocess.PIPE) 当前子进程ID proc.pid 28906 返回状态为...,只返回结果 res = subprocess.check_output(['ls','-l'])执行成功返回执行结果,不成功出错 subprocess.getstatsoutput('ls /...close_sfs被设置为True,则新创建的子进程将不会继承父进程的输入、输出、错误管道 所以不能将close_fds设置为True同时重定向子进程的标准输入、输出与错误 shell:同上 cod:用于设置子进程的当前目录
os.popen 实际上是一个简单的封装,我们先来看他的原型:subprocess.popen subprocess.Popen( args, bufsize=0, executable=None...如果cwd(工作目录)不是None,则会把cwd做为子程序的当前目录。注意,并不会把该目录做为可执行文件的搜索目录,所以不要把程序文件所在目录设置为cwd。...,接着将subprocess.popen打开管道的输入值(stdin)重定向,即可解决问题!...stderr=subprocess.STDOUT, stdin=subprocess.PIPE ) ret = proc.wait() # 此处其实有返回值 with open('输出文件....= 0: ctypes.windll.user32.ShowWindow(whnd, 1) 到此这篇关于pyinstaller打包成无控制台程序时运行出错(与popen冲突的解决方法)的文章就介绍到这了
subprocess通过子进程来执行外部指令,并通过input/output/error管道,获取子进程的执行的返回信息。...常用方法: subprocess.call(): 执行命令,并返回执行状态,其中shell参数为False时,命令需要通过列表的方式传入,当shell为True时,可直接传入命令 示例如下: >>> a...0时,直接返回输出结果,如果返回值不为0,直接抛出异常。...bufsize:缓冲区大小,可不用关心 stdin,stdout,stderr:分别表示程序的标准输入,标准输出及标准错误 shell:与上面方法中用法相同 cwd:用于设置子进程的当前目录 env:用于指定子进程的环境变量...的目录: >>> a = subprocess.Popen('mkdir subprocesstest',shell=True,cwd='/root') 示例2,使用python执行几个命令: import
同时p.commucincate() 返回一个tuple 值 (stdout_some, stderr_some) = p.communicate(stdin_some).所以,调用subprocess.Popen...注意:如果需要使用communication() 方法与子进程通信,那么在创建子进程时,stdin, stdout, stderr, 都需要用subprocess.PIPE 初始化。...subprocess.Popen 的一些方法: Popen.communicate() : 与外部通信,(out, errout) = Popen.communicate(), 返回标准输出和错误输出...Popen.wait() : 等待进程结束,并获得返回码。 Popen.pid : 返回进程pid 号 Popen.kill() : 杀死进程 举例: 1....命令,列出当前目录的文件,命令的执行结果在标准输出stdout, 因为stdout 用PIPE 初始化了, 所以,在In [129] 行,用p.stdout.read() 将内容读出。 2.
, shell=True, stdout=subprocess.PIPE, text=True) print(result.stdout) 在这个例子中,通过检查platform.system()确定当前操作系统...使用check_call检查返回码 subprocess.check_call()函数类似于subprocess.run(),但是只返回返回码而不返回其他信息。...使用subprocess.Popen的shell参数 subprocess.Popen类也提供了shell参数,允许你在启动子进程时使用Shell解释器执行命令。...使用subprocess.Popen的cwd参数设置工作目录 subprocess.Popen的cwd参数允许你设置子进程的工作目录。这在需要在特定目录下执行命令时非常有用。...使用subprocess.Popen的shell参数执行Shell命令 subprocess.Popen的shell参数允许你在启动子进程时执行Shell命令。
(1)subprocess.Popen类subprocess.Popen(args, bufsize=0, executable=None, stdin=None, stdout=None, stderr...shell Linux:参数值为False时,Linux上通过调用os.execvp执行对应的程序。为Trule时,Linux上直接调用系统shell来执行程序。...preexec_fn 只在Unix平台下有效,用于指定一个可执行对象(callable object),它将在子进程运行之前被调用cwd设置子进程当前目录env env是字典类型,用于指定子进程的环境变量...Returns returncode attribute.常用实例1、打印D:\temp目录下创建test目录。...调用外部系统命令,返回命令执行输出结果,但不返回结果吗import os#学习中遇到问题没人解答?
只有一个空串时django显示欢迎页面) (r'^time/plus/(d)/$', hours_ahead),urls.py用圆括号从正则中提取数据; def hours_ahead(request,...它将返回一个基于模板的展现字符串,模板中的变量和标签会被context 值替换。...management/commands目录,django就会自动的为commands目录下的每个模块自动注册manage.py命令,可以用python manage.py command_name来调用...于是我们就可以放心的修改url.py里的url配置,不 必再担心有什么地方没修改网站出错啦” 说白了,reverse()就是屌丝views的逆袭,从views里面的方法反解url,该函数返回的字符串就是一个...(数据库socket连接会抛出异常“数据库已不在”/"查询过程中出错") 如果在某个django的进程里面用os.popen()或者subprocess.Popen()创建新的django进程(比如启动一个
*等subprocess通过子进程来执行外部指令,并通过input/output/error管道,获取子进程的执行的返回信息。...使用方法: 运行外部命令:subprocess.call(command) subprocess的call方法可以用于执行一个外部命令,但该方法不能返回执行的结果,只能返回执行的状态码: 成功(0) 或...与进程的单向通信:通过Popen()方法调用命令后执行的结果,可以设置stdout值为PIPE,再调用communicate()获取结果,返回结果为tuple....'echo','"Stdout"'],stdout=subprocess.PIPE) # communicate返回标准输出或标准出错信息 >>> stdout_value = proc.communicate...('ls -l', shell=True, stdout=subprocess.PIPE) # 当前子进程ID proc.pid 5919 # 返回状态None,进程未结束 print(proc.returncode
2) 函数返回什么 3) 当returncode不为0时,父进程如何处理。...subprocess.call() 父进程等待子进程完成 返回退出信息(returncode,相当于exit code,见Linux进程基础) subprocess.check_call() 父进程等待子进程完成...返回0 检查退出信息,如果returncode不为0,则举出错误subprocess.CalledProcessError,该对象包含有returncode属性,可用try...except...来检查...subprocess.check_output() 父进程等待子进程完成 返回子进程向标准输出的输出结果 检查退出信息,如果returncode不为0,则举出错误subprocess.CalledProcessError...我们必须调用对象的wait()方法,父进程才会等待 (也就是阻塞block): import subprocess child = subprocess.Popen(["ping","-c","5","
data\asset,data\fight 用户名 密码 行为:依次在E:\svn\data\code、E:\svn\data\asset、E:\svn\data\fight执行svn update 成功返回成功结束码和成功信息...、失败返回失败结束码和失败信息 ######## Script Demo ######## #!.../usr/bin/env python #coding:utf-8 import subprocess,os,sys parentPath = sys.argv[1] #第一个参数根目录...line #如:d:\data\ + minion1,d:\data\ + minion2, try: os.chdir(path) #切换到svn更新目录...sys.exit(1) else: print "###### 1 %s switch success ######" % path #获取错误输出 mytask = subprocess.Popen
创建压缩包并返回文件路径,例如:zip、tar 创建压缩包并返回文件路径,例如:zip、tar base_name: 压缩包的文件名,也可以是压缩包的路径。...只是文件名时,则保存至当前目录,否则保存至指定路径, 如 data_bak =>保存至当前路径 如:/tmp/data_bak =>保存至/tmp/ format...: 压缩包种类,“zip”, “tar”, “bztar”,“gztar” root_dir: 要压缩的文件夹路径(默认当前目录) owner: 用户,默认当前用户 group: 组,默认当前组 logger...: 用于记录日志,通常是logging.Logger对象 #1、将 /data 下的文件打包放置当前程序目录 import shutil ret = shutil.make_archive("data_bak...AGE=10 while True: age=input('>>: ').strip() if age.isdigit(): #只有在age为字符串形式的整数时,下列代码才不会出错,该条件是可预知的
但是无法读取程序执行的返回值) 适用于Python2 尝试第三种方案 commands.getstatusoutput() 一个方法就可以获得到返回值和输出,非常好用。...更丰富的功能 (1) call 执行命令,返回状态码(命令正常执行返回0,报错则返回1) ret1=subprocess.call("ifconfig") ret2=subprocess.call("ipconfig...subprocess.check_output("exit 1", shell=True) (4) subprocess.Popen(…) 用于执行复杂的系统命令 参数 注释 args...shell 同上 cwd 用于设置子进程的当前目录 env 用于指定子进程的环境变量。如果env = None,子进程的环境变量将从父进程中继承。...#在cwd目录下执行命令 import subprocess obj = subprocess.Popen(["python"], stdin=subprocess.PIPE, stdout=subprocess.PIPE
返回0 检查退出信息,如果returncode不为0,则举出错误subprocess.CalledProcessError,该对象包含有returncode属性,可用try…except…来检查 例:...检查退出信息,如果returncode不为0,则举出错误subprocess.CalledProcessError,该对象包含有returncode属性和output属性,output属性为标准输出的输出结果...Popen调用os.execvp()执行args指定的程序;shell=True时,如果args是字符串,Popen直接调用系统的Shell来执行args指定的程序,如果args是一个序列,则args...的第一项是定义程序命令字符串,其它项是调用系统Shell时的附加参数。...1.glob.glob 返回所有匹配的文件路径列表。
call 执行命令,返回状态码 1 2 ret = subprocess.call(["ls", "-l"], shell=False) ret = subprocess.call("...ls -l", shell=True) check_call 执行命令,如果执行状态码是 0 ,则返回0,否则抛异常 1 2 subprocess.check_call(["ls", "-l"...]) subprocess.check_call("exit 1", shell=True) check_output 执行命令,如果状态码是 0 ,则返回执行结果,否则抛异常 1 2...subprocess.check_output("exit 1", shell=True) subprocess.Popen(...)...shell:同上 cwd:用于设置子进程的当前目录 env:用于指定子进程的环境变量。如果env = None,子进程的环境变量将从父进程中继承。
cwd=cwd:设置子进程的工作目录。 如果调用的shell命令本身在执行之后会突然出现很多输出,则这个时候可能会导致hang在那里,表现就是卡死了,程序也不往下走,也不会报错。。。...shell=True, executable="/bin/bash", check=True, cwd=cwd # 指定子进程的工作目录...它返回一个 Popen 对象,通过该对象你可以控制子进程的输入、输出和状态。...subprocess.run 是一个更高级别的函数,封装了一系列常用的子进程操作,例如执行命令并等待其完成,然后返回一个包含执行结果的 CompletedProcess 对象。...subprocess.Popen 提供了更多的灵活性,但需要你手动管理子进程的输入、输出和状态,因此在处理更复杂的子进程交互时可能需要更多的工作。
解决方案一:使用引号包裹路径最简单的解决方法是在执行命令时用双引号把含有空格的路径包裹起来。...解决方案三:利用Python的os模块处理路径Python的os模块提供了很多处理文件和目录路径的功能。其中,os.path.normpath()函数可以返回一个规范化的绝对路径字符串。...import subprocesscmd = '"C:\\Program Files\MyApp\\app.exe"'process = subprocess.Popen(cmd, shell=True...)使用subprocess.Popen可以给你更多的控制权,例如你可以等待进程完成,获取返回值等。...真实案例:如何解决实际项目中的路径空格问题在实际工作中,我曾遇到过因路径中存在空格而导致CI(持续集成)流程出错的情况。通过应用本篇文章中提到的技巧,成功地解决了这一问题,并优化了的自动化部署流程。
前言 subprocess 模块允许我们启动一个新进程,并连接到它们的输入/输出/错误管道,从而获取返回值。 Popen 是 subprocess的核心,子进程的创建和管理都靠它处理。...当创建标准流的管道对象时使用,默认-1。...0: 不使用缓冲区 1: 表示行缓冲,仅当universal_newlines=True时可用,也就是文本模式 正数: 表示缓冲区大小 负数: 表示使用系统默认的缓冲区大小。...cwd: 用于设置子进程的当前目录。 env: 用于指定子进程的环境变量。 如果 env = None,子进程的环境变量将从父进程中继承。...returncode,否则返回 None。
所以在涉及操作系统相关的操作时,请尽量使用本模块提供的方法,而不要使用当前平台特定的用法或格式,否则一旦移植到其他平台,可能会造成难以解决的困扰。...方法和变量 用途 os.name 查看当前操作系统的名称。windows 平台下返回‘nt’,Linux 则返回‘posix’。...方法和变量 用途 os.getcwd() 获取当前工作目录,即当前 python 脚本工作的目录路径 os.chdir(“dirname”) 改变当前脚本工作目录;相当于 shell 下 cd os.curdir...返回当前目录: (’.’) os.pardir 获取当前目录的父目录字符串名:(’…’) os.makedirs(‘dir1/dir2’) 可生成多层递归目录 os.removedirs(‘dirname1...#返回当前目录 '.' >>> os.pardir #返回父目录 '..' >>> os.makedirs("1\\2") #创建目录 >>> os.removedirs("1\\2") 删除目录 >
返回:'hello world!...,注意是返回结果,不是打印,下例结果返回给res res = subprocess.getoutput("ls /bin/sh") res 输出:'/bin/sh' subprocess.getstatusoutput...接收字符串格式命令,返回元组形式,第1个元素是执行状态,第2个是命令结果 subprocess.getstatusoutput("ls /bin/ls") 返回:(0,...'/bin/ls') subprocess.getoutput 接收字符串格式命令,并返回结果 subprocess.getoutput("ls /bin/ls") 返回:'...shell:同上 cwd:用于设置子进程的当前目录 env:用于指定子进程的环境变量。如果env = None,子进程的环境变量将从父进程中继承。
领取专属 10元无门槛券
手把手带您无忧上云