如何在Python程序中运行Unix命令

如何在Python程序中运行Unix命令Unix是由KenThompson和DennisRitchie在1969年左右在AT&T贝尔实验室开发的操作系统。我们可以使用许多有趣的Unix命令来执行不同的任务。问题是,我们可以直接在Python程序中使用此类命令吗?这就是我将在本教程中向您展示的内容。Unix命令ls列出目录中的所有文件。如果在Python脚本中按原样放置ls,则在运行程序时将得到以下内容:Tra…

大家好,又见面了,我是你们的朋友全栈君。

Unix是由Ken Thompson和Dennis Ritchie在1969年左右在AT&T贝尔实验室开发的操作系统。 我们可以使用许多有趣的Unix命令来执行不同的任务。 问题是,我们可以直接在Python程序中使用此类命令吗? 这就是我将在本教程中向您展示的内容。

Unix命令ls列出目录中的所有文件。 如果在Python脚本中按原样放置ls ,则在运行程序时将得到以下内容:

Traceback (most recent call last):
  File "test.py", line 1, in <module>
    ls
NameError: name 'ls' is not defined

这表明Python解释器将ls视为变量,并要求对其进行定义(即初始化),而没有将其视为Unix命令。

os.system()

解决此问题的一种方法是使用Python的os模块中的os.system()

如文档中所述, os.system()

在子外壳程序中执行命令(字符串)。 这是通过调用标准C函数system()来实现的,并且具有相同的限制。

因此,我们可以在Python中运行ls命令,如下所示:

import os
os.system('ls')

这将返回当前目录( .py程序所在的位置)中的文件列表。

让我们再举一个例子。 如果要返回当前日期和时间,可以使用Unix命令date ,如下所示:

import os
os.system('date')

就我而言,这就是上面脚本的结果:

Tue May 24 17:29:20 CEST 2016

呼叫()

尽管os.system()可以工作,但是不建议使用os.system() ,因为它被认为已过时且已过时。 推荐使用的解决方案是Python的subprocess模块call(args)函数。 如有关此功能的文档中所述:

运行args描述的命令。 等待命令完成,然后返回returncode属性。

如果要使用此方法运行ls Unix命令,则可以执行以下操作:

from subprocess import call
call('ls')

让我们看看如何使用subprocess模块返回日期,但是让这个例子更有趣。

import subprocess 
time = subprocess.Popen('date', stdout=subprocess.PIPE, stderr=subprocess.PIPE)
output, err = time.communicate()
print 'It is', output

可以使用check_output()更简单地运行以上示例,如下所示:

import subprocess 
time = subprocess.check_output('date')
print 'It is', time

以上脚本的输出为:

It is Tue May 24 19:14:22 CEST 2016

上面的示例显示了使用不同subprocess函数的灵活性,以及​​如何将结果传递给变量以执行进一步的操作。

结论

正如我们在本教程中看到的那样,可以使用subprocess模块来调用和执行Unix命令,当通过其不同功能使用Unix命令时,该模块提供了很大的灵活性。 您可以从Python文档中了解有关此模块及其不同功能的更多信息。

翻译自: https://code.tutsplus.com/articles/how-to-run-unix-commands-in-your-python-program–cms-25926

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/142768.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • JAVA线程通信详解[通俗易懂]

    JAVA线程通信详解[通俗易懂]目录一、概述二、wait/notify机制三、Condition四、生产者/消费者模式五、线程间的通信——管道六、方法Join的使用一、概述    线程与线程之间不是相互独立的个体,它们彼此之间需要相互通信和协作,最典型的例子就是生产者-消费者问题:当队列满时,生产者需要等待队列有空间才能继续往里面放入商品,而在等待的期间内,生产者必须释放对临界资源(即队列…

    2022年6月19日
    30
  • oncontextmenu属性_360兼容模式

    oncontextmenu属性_360兼容模式公司的网站内容都是一些专业性很强的内容,而且内容都是花钱买来的,所以不想让别人轻而易举的复制过去,就尝试使用js控制一下,但是找了很多js代码,都是不支持firefox,如下取消选取、防止复制ie支持firefox不支持oncontextmenu="window.event.returnValue=false"ie支持firefox出错window.event…

    2022年8月14日
    10
  • 01_很好的网站:程序师

    01_很好的网站:程序师

    2021年9月1日
    64
  • bat批处理 for循环_批处理 for /f

    bat批处理 for循环_批处理 for /f一、前言在批处理中,for是最为强大的命令语句,它的出现,使得解析文本内容、遍历文件路径、数值递增/递减等操作成为可能;配合if、call、goto等流程控制语句,更是可以实现脚本复杂的自动化、智能化操作;合理使用for语句,还能使代码大为简化,免除各位编写大量重复语句之苦。二、for语句的基本用法1、举例:正如色彩缤纷的七彩光芒是由红绿蓝三原色构成的一样,最复杂的for语句,也…

    2022年10月9日
    3
  • 大数据要学javaweb吗_大数据用学JAVA吗?

    大数据要学javaweb吗_大数据用学JAVA吗?谢邀学大数据没有必要报专门的Java班.学习大数据之前确实要先学习一点Java的内容,因为大数据和Java不是完全分裂的,大数据的开发语言中最重要的一种就是Java.学习Java主要包括四大块:Java基础(JavaSE),JavaWeb,Java框架(JavaEE),Java项目,但是学习大数据只是用Java作为编程语言,只要学习Java基础(JavaSE)就够了,至于后面的三块儿内容可以先…

    2022年5月8日
    60
  • @RequestParam,@PathParam,@PathVariable等注解区别[通俗易懂]

    @RequestParam,@PathParam,@PathVariable等注解区别[通俗易懂]@RequestParam和@PathVariable注解是用于从request中接收请求的,两个都可以接收参数,关键点不同的是@RequestParam是从request里面拿取值,而@PathVariable是从一个URI模板里面来填充@RequestParam看下面一段代码:http://localhost:8080/springmvc/hello/101?param1=10&pa

    2022年6月17日
    42

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号