Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何创建;cmd";Python中的函数?_Python_Shell_Command Line - Fatal编程技术网

如何创建;cmd";Python中的函数?

如何创建;cmd";Python中的函数?,python,shell,command-line,Python,Shell,Command Line,我正在尝试创建一个函数,该函数返回输出,因为命令将写入Windows或Linux中的命令行 示例: def cmd_simulator(commands): #some code cmd_simulator("date") - Thu Jan 28 12:18:05 EST 2016 或窗口: cmd_simulator("date") - The current date is: Thu 01/28/2016 - Enter the new date: (mm-dd-yy)

我正在尝试创建一个函数,该函数返回输出,因为命令将写入WindowsLinux中的命令行

示例:

def cmd_simulator(commands):
    #some code

cmd_simulator("date")

- Thu Jan 28 12:18:05 EST 2016
或窗口:

cmd_simulator("date")

- The current date is: Thu 01/28/2016
- Enter the new date: (mm-dd-yy)

您需要使用
子流程
模块来处理python脚本中的命令行。 如果您只需要获取命令的输出,则使用
子流程。检查\u output(cmd)

cmd
是程序参数的序列(python列表)。因此,如果您的命令只包含一个单词(例如
date
),那么它将使用
cmd=“date”
。但是如果您有一个较长的命令(例如
cmd=“grep'pattern”input_file.txt”
),那么它将不起作用,因为您需要拆分命令行的不同参数。为此,请使用
shlex
模块:
shlex.split(cmd)
将向子流程返回适当的序列

因此,cmd_模拟器的代码如下:

import subprocess
import shlex

def cmd_simulator(cmd):
    return subprocess.check_output(shlex.split(cmd))
当然,您可以在这个函数中添加一些try/except来检查命令是否正常工作,等等


例如,如果您不仅需要命令的stdout,还需要stderr,那么您应该使用
subprocess.Popen(cmd)

您可以使用以下方法-

import subprocess

cmd_arg = "date"
proc = subprocess.Popen(cmd_arg,  stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
out, err = proc.communicate()

print(out) #Thu Jan 28 12:18:05 EST 2016

是否要将命令委托给控制台外壳?可能对您有用。
cmd\u simulator=lambda cmd:os.popen(cmd.read();打印命令(“日期”)