How to get data from command line from within a Python program?
我想从一个python脚本中运行一个命令行程序并获得输出。
如何获取foo显示的信息,以便在脚本中使用它?
例如,我从命令行调用
1 2 3 | Size: 3KB Name: file1.txt Other stuff: blah |
我怎样才能让文件名像
使用子进程模块:
1 2 3 4 5 6 | import subprocess command = ['ls', '-l'] p = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.IGNORE) text = p.stdout.read() retcode = p.wait() |
然后你可以做任何你想
第二和第三
在最简单的方式来获得输出为一通孔的工具是使用Python脚本中使用的标准库模块。有一个看subprocess.check _输出。
1 2 3 | >>> subprocess.check_output("echo "foo"", shell=True) 'foo ' |
(如果你得到来自不可信来源的输入工具,确保不使用
这是一个bash脚本通常a主题:在Python中,你可以运行
1 2 3 4 5 6 7 8 9 10 11 12 13 | #!/bin/bash # vim:ts=4:sw=4 for arg; do size=$(du -sh"$arg" | awk '{print $1}') date=$(stat -c"%y""$arg") cat<<EOF Size: $size Name: ${arg##*/} Date: $date EOF done |
编辑:如何使用它:打开一pseuso终端,然后复制粘贴本:
1 2 | cd wget http://pastie.org/pastes/2900209/download -O info-files.bash |
在python2.4:
1 2 3 4 5 6 | import os import sys myvar = ("/bin/bash ~/info-files.bash '{}'").format(sys.argv[1]) myoutput = os.system(myvar) # myoutput variable contains the whole output from the shell print myoutput |
在Python中,你可以通过一个操作系统命令subquotes平原和newlines到空间,所以我们
本test.py保存为:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #!/usr/bin/python import subprocess command = ('echo"this echo command' + ' has subquotes, spaces, " && echo"and newlines!"') p = subprocess.Popen(command, universal_newlines=True, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) text = p.stdout.read() retcode = p.wait() print text; |
然后运行它像这样:
1 | python test.py |
这照片:
1 2 3 4 | this echo command has subquotes, spaces, and newlines! |
如果这不是为你工作,它可能是一个麻烦的Python版本或操作系统。我使用Ubuntu(12.10这在Python的例子。
这是一个便携式的解决方案:在纯Python
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | import os import stat import time # pick a file you have ... file_name = 'll.py' file_stats = os.stat(file_name) # create a dictionary to hold file info file_info = { 'fname': file_name, 'fsize': file_stats [stat.ST_SIZE], 'f_lm': time.strftime("%m/%d/%Y %I:%M:%S %p",time.localtime(file_stats[stat.ST_MTIME])), } print(""" Size: {} bytes Name: {} Time: {} """ ).format(file_info['fsize'], file_info['fname'], file_info['f_lm']) |