繁体   English   中英

如何在python中使用子进程模块

[英]How to use subprocess module in python

如果我想从python 2.7调用诸如terminal(ubuntu)之类的命令怎么办,所以我想使用它可以在ubuntu终端中使用的nfc-mfclassic ...请有人可以帮助我在python中使用它。

我在终端(Ubuntu)中运行此东西: nfc-mfclassic ra dumptest.mfd

Usage: nfc-mfclassic r|w a|b <dump.mfd> [<keys.mfd>]
  r|w           - Perform read from (r) or write to (w) card
  a|b           - Use A or B keys for action
  <dump.mfd>    - MiFare Dump (MFD) used to write (card to MFD) or (MFD to card)
  <keys.mfd>    - MiFare Dump (MFD) that contain the keys (optional)
Or: nfc-mfclassic x <dump.mfd> <payload.bin>
  x             - Extract payload (data blocks) from MFD
  <dump.mfd>    - MiFare Dump (MFD) that contains wanted payload
  <payload.bin> - Binary file where payload will be extracted

您可以直接使用子流程,但是有两个非常好的子流程包装器,它们可以使您的生活更加轻松。

我喜欢PBS

PBS是一个独特的子流程包装器,可将您的系统程序动态映射到Python函数。 PBS通过为您提供Bash的良好功能(简单的命令调用,简单的管道)以及Python的所有功能和灵活性,可帮助您用Python编写Shell脚本。

例:

import pbs
print pbs.nfc_mfclassic("r", "a", "dumptest.mfd")

如果您想处理一个迭代的应用程序,也许您应该寻找类似pyexpect的东西:

# This connects to the openbsd ftp site and
# downloads the recursive directory listing.
import pexpect
child = pexpect.spawn ('ftp ftp.openbsd.org')
child.expect ('Name .*: ')
child.sendline ('anonymous')
child.expect ('Password:')
child.sendline ('noah@example.com')
child.expect ('ftp> ')
child.sendline ('cd pub')
child.expect('ftp> ')
child.sendline ('get ls-lR.gz')
child.expect('ftp> ')
child.sendline ('bye')
>>> import subprocess
>>> command = raw_input()
nfc-mfclassic r a dumptest.mfd

p = subprocess.Popen(command)

该命令正是您在shell cmdline中键入的内容。 困难的部分是正确格式化命令文本。

参考: http : //docs.python.org/library/subprocess.html#module-subprocess

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM