我有一个在Windows下运行的python3.5脚本,它调用了大量文件的外部问题(确切地说是BLAST+套件中的tblastn)。对于大多数这些文件,它运行得很好,但对于某些文件,它会失败,返回代码0xc000005。如果我使用完全相同的命令行调用,并从控制台在同一个当前工作目录中运行它,它执行得很好。在
我当前使用subprocess.Popen
运行命令,如下所示:
childProcess = subprocess.Popen(blast_cmd, stdin=subprocess.PIPE,
stdout=subprocess.PIPE, stderr=subprocess.PIPE,
universal_newlines=True,shell=True)
然后调用subprocess.poll()
直到完成。我通过同时运行四个进程来实现这一点,但是如果我一次强制运行一个进程,仍然会发生这种情况。同样的情况发生在os.system
、subprocess.run()
、subprocess.call()
和{shell
设置为True
还是{
每次运行代码时,它失败的文件都是相同的,但如果将同一个文件放入不同的文件列表中进行处理,则相同的文件将起作用。更改调用方法有时会更改哪些文件失败,因此使用os.system
可能会导致与subprocess.Popen
不同的文件失败。因此,似乎并不取决于我在哪个文件上调用tblastn。在
有人知道是什么导致了这种行为吗?在
或者,如果有人知道在创建的进程中运行(文档中说它使用CreateProcess()
)与从命令行运行有什么不同,那么至少我有地方可以开始?在
错误代码很可能是“拒绝访问”(虽然windows头文件中有4个代码结构,但访问被拒绝的可能性最大:
我将首先查看用于运行原始(启动/父)脚本的用户权限/凭据,子进程/子进程从该脚本继承其凭据。。。然后将其与您所描述的“在cmd提示符上运行此命令”时使用的凭据进行比较。在
嗯, 埃德温。在
相关问题 更多 >
编程相关推荐