我有一个成功运行的Python程序。如果我改变这一行:
os.system("ls /path")
到此:
subprocess.Popen(["ls /path"], shell=True)
然后ls
命令生成以下错误:
ls: cannot access '/path': Software caused connection abort
这两种运行ls
的方法有什么不同?
N.B。 /path
是我正在测试的FUSE文件系统的挂载点。我确信这是相关的,因为当ls
命令指向非FUSE路径时,我发现上述两种情况之间没有区别。但是,为了让ls
触发不同的行为,Python采取了哪些不同的做法?
这是Ubuntu 16.04上的Python 3.5。
答案 0 :(得分:1)
strace
,并检查您的具体情况有何不同:
strace -f ./system.py >/dev/null 2> system.strace
strace -f ./popen.py >/dev/null 2> popen.strace
其中system.py
将是:
#!/usr/bin/env python3
import subprocess
subprocess.Popen(["ls /path"], shell=True)
和popen.py
:
#!/usr/bin/env python3
import os
os.system("ls /path")
此外,您可以考虑在保险丝文件系统的getattr()
调用中记录传入的请求。
另一个有趣的提示是错误消息,它看起来像是与套接字相关的错误。