os.popen os.system subprocess shutil区别

2023-05-16

os.popen os.system subprocess shutil 区别

最近由于工作需求接触python,记录下遇到的问题

1 os.popen os.system 的区别:

总结:os.popen()可以实现一个“管道”,从这个命令获取的值可以继续被使用。因为它返回一个文件对象,可以对这个文件对象进行相关的操作。而 os.system 只是返回运行的结果;
(1) os.system(command):该方法在调用完shell脚本后,返回一个16位的二进制数,
低位为杀死所调用脚本的信号号码,高位为脚本的退出状态码,
即脚本中“exit 1”的代码执行后,os.system函数返回值的高位数则是1,如果低位数是0的情况下,
则函数的返回值是0x0100,换算为十进制得到256。
要获得os.system的正确返回值,可以使用位移运算(将返回值右移8位)还原返回值:
(2)os.popen(command):这种调用方式是通过管道的方式来实现,函数返回一个file对象,里面的内容是脚本输出的内容(可简单理解为echo输出的内容),使用os.popen调用test.sh的情况:

2 python之shutil模块

shutil可以简单地理解为sh + util,shell工具的意思。shutil模块是对os模块的补充,主要针对文件的拷贝、删除、移动、压缩和解压操作。
一篇文章带你搞定Python中shutil模块

python中shutil文件操作模块的使用

3 Python3 subprocess

subprocess模块主要用于创建子进程,并连接它们的输入、输出和错误管道,获取它们的返回状态。通俗地说就是通过这个模块,你可以在Python的代码里执行操作系统级别的命令,比如“ipconfig”、“du -sh”等等。subprocess模块替代了一些老的模块和函数,比如:

os.system
os.spawn*

subprocess过去版本中的call(),check_call()和check_output()已经被run()方法取代了。run()方法为3.5版本新增。
大多数情况下,推荐使用run()方法调用子进程,执行操作系统命令。在更高级的使用场景,你还可以使用Popen接口。其实run()方法在底层调用的就是Popen接口。

推荐的subprocess

#执行ls -l /dev/null 命令
>>> subprocess.run(["ls", "-l", "/dev/null"])
crw-rw-rw-  1 root  wheel    3,   2  5  4 13:34 /dev/null
CompletedProcess(args=['ls', '-l', '/dev/null'], returncode=0)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

os.popen os.system subprocess shutil区别 的相关文章

  • 如何在shutil.copytree中编写忽略的回调函数

    我对 python 比较陌生 我正在尝试将一个目录复制到另一个维护结构的目录 我在用 shutil copytree src dst symlinks False ignore None copy function copy2 ignore
  • 在 Java 7 Update 45 中,不再通过 JNLP 标签“属性”设置系统属性

    我们从附加的 JNLP 运行该应用程序 在 Java 控制台上 我们已使用 D 输出系统属性 JNLP 文件中的属性不再设置 这是我们遇到此类问题的第一个 Java 版本 在 7 Update 40 之前一切都运行良好 我们已对所有 jar
  • Python Popen().stdout.read() 挂起

    我正在尝试使用 Python 获取另一个脚本的输出subprocess Popen就像下面这样 process Popen command stdout PIPE shell True exitcode process wait outpu
  • 使用Intent打开系统应用程序

    我正在尝试制作一个简单的应用程序 当用户从主屏幕或应用程序抽屉单击时 该应用程序会将用户发送到特定的 系统安装的 应用程序 系统设置 日历 浏览器等 例如 我目前尝试在启动应用程序时打开系统设置 就像设置快捷方式一样 可以按照我想要的方式实
  • Python:如何确定子进程子进程已全部运行完毕

    我试图检测安装程序何时从 Python 脚本中完成执行 具体来说 该应用程序是Oracle 10gR2数据库 目前我正在将 subprocess 模块与 Popen 一起使用 理想情况下 我只需使用 wait 方法来等待安装完成执行 但是
  • Popen.communicate() 抛出 UnicodeDecodeError

    我有这个代码 def executeCommand self command str input str None gt str p sub Popen command stdout sub PIPE stderr sub PIPE std
  • Perl system() 调用会终止吗?

    Can a system 打电话可以永远die在 Perl 5 中 换句话说 为了 100 防崩溃 执行以下操作的程序system call 是否需要将其包装成eval block 或者这是完全没有必要的 我在 中没有发现任何提及这种可能性
  • 系统虚拟化:了解 IO 虚拟化和虚拟机管理程序的作用 [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我想对I O虚拟化有一个正确的理解 上下文是纯 全虚拟化 而不是半虚拟化 我的理解是 虚拟机管理程序虚拟化硬件并向每个沙盒应用程序提供虚拟资源 每个沙
  • Python/Windows,防止子进程(外部程序)显示弹出窗口

    Python 2 7 操作系统 Windows 程序始终在 Windows 上运行 因此交叉兼容性不是问题 我被迫使用外部应用程序作为验证过程的一部分 并且在隐藏作为该外部程序的输出的弹出窗口时遇到了麻烦 基本上我这样做 args A pa
  • 使用Python子进程处理带括号的文件路径

    我要处理的文件的路径中包含括号 path dir file with parentheses txt 我正在尝试用 Python 处理它们 如下所示 subprocess call process s path shell True 但是
  • 如何在子进程期间和之后执行操作

    我有一个调用子程序的程序 当子程序使用 Popen 运行时 我需要禁用运行按钮并启用停止按钮 但是 由于Popen打开了一个新进程 因此程序完成后应该打印的内容会立即打印出来 我尝试添加self p communicate after Po
  • 在 Ruby 中获取 system() 调用的输出

    如果我使用调用命令内核 系统 http ruby doc org core 2 2 0 Kernel html method i system在 Ruby 中 如何获取其输出 system ls 我想扩展和澄清混沌的答案 https sta
  • 如何从 Python (2.7) 中生成的进程中消除 Windows 控制台? [复制]

    这个问题在这里已经有答案了 可能的重复 在没有控制台的情况下使用 Popen 在 python 中运行进程 https stackoverflow com questions 1813872 running a process in pyt
  • 在 python 中计时时,我应该如何考虑 subprocess.Popen() 开销?

    编码社区的成员比我更聪明 我有一个 python 问题要问你们 我正在尝试优化一个 python 脚本 该脚本 除其他外 返回子进程执行和终止的挂钟时间 我想我已经接近这样的事情了 startTime time time process s
  • 使用 python 运行另一个程序? [复制]

    这个问题在这里已经有答案了 我有一个从命令行运行的程序 如下所示 program a txt b txt 该程序需要两个文本文件作为参数 我正在尝试编写一个 Python 3 2 脚本来运行上述程序 我怎样才能做到这一点 目前 我正在尝试使
  • 将 sudo 与 Python 脚本结合使用

    我正在尝试编写一个小脚本来在每次执行脚本时安装 VirtualBox 共享文件夹 我想用Python 来做这件事 因为我正在尝试学习它来编写脚本 问题是我需要特权才能启动挂载命令 我可以将脚本作为 sudo 运行 但我更喜欢它自己创建 su
  • 将参数传递给调试器中的 perl 文件并在系统执行的文件中设置断点

    因此 我使用 perl d file pl 在 perl 调试器中运行一个文件 但 file pl 也应该接受参数 如何向 file pl 提供参数 还有一个问题 file pl 中有这一行 system file2 pl 如果 file2
  • 如何用Java写入OS系统日志?

    Mac OS 有一个名为 Console 的应用程序 其中包含记录的消息 错误和故障 我相信 Windows 中的等效项是事件查看器 我想 Linux 上也有一个 但我不知道它是什么 也不知道它在哪里 是否可以像这样从 Java 输出获取消
  • 无法获取 android.permission.CLEAR_APP_USER_DATA

    我正在开发需要特殊权限的系统应用程序 由于某种原因 我无法获得 CLEAR APP USER DATA 权限 但我可以使用 INSTALL PACKAGES DELETE PACKAGES 等 什么可能导致这种情况 显现 uses perm
  • subprocess.Popen('start') 失败

    在 python 中运行此命令将导致 WindowsError 指出找不到指定的文件 FAILS import subprocess subprocess Popen start notepad exe 在命令窗口中 它可以工作 start

随机推荐