1

如果我想从 python 2.7 调用类似终端(ubuntu)的命令,我应该怎么做,所以我想使用它可以在 ubuntu 终端中使用的 nfc-mfclassic ......有人可以帮我在 python 中使用它。

我运行这个东西:nfc-mfclassic r a dumptest.mfd在终端(Ubuntu)

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
4

2 回答 2

1

您可以直接使用 subprocess,但是有几个非常好的 subprocess 包装器可以让您的生活更轻松。

我喜欢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')
于 2012-05-07T04:05:22.660 回答
0
>>> import subprocess
>>> command = raw_input()
nfc-mfclassic r a dumptest.mfd

p = subprocess.Popen(command)

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

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

于 2012-05-07T04:06:06.950 回答