环境:win7

shell: git-bash

文件名subprocess.py

代码如下:

import subprocess

print('$ nslookup www.seasidecrab.com')
r = subprocess.call(['nslookup', 'www.seasidecrab.com'])
print('Exit code:', r)

问题

完全按照廖雪峰老师的例子来的,但莫名报错:

Traceback (most recent call last):
  File "subprocess.py", line 12, in <module>
    import subprocess
  File "D:\Projects\pytest\subprocess.py", line 15, in <module>
    r = subprocess.call(['nslookup', 'www.seasidecrab.com'])
AttributeError: module 'subprocess' has no attribute 'call'

解决

一开始以为是 windows 平台的问题,因为有些模块 windows 上是没有的。但廖老师的教程里并没有提到,这让产生怀疑,廖老师的教程不会出现这种低级的错误,那么肯定是自己代码问题了,但代码很简洁,没有什么可以挖掘的。

百度这个错误,终于发现了问题的本质:

程序文件名是 subprocess.py,导致 import subprocess 导入的不是 Python 中的 subprocess, 而是你的这个文件,然而你的文件中没有 call

所以,文件名不要与 Python 中的模块名相同。

修改一下文件名即可。