大家好,又见面了,我是你们的朋友全栈君。
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.cn/142768.html原文链接:https://javaforall.cn