Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python subprocess.py-没有这样的文件或目录_Python_Python 2.7_Subprocess - Fatal编程技术网

Python subprocess.py-没有这样的文件或目录

Python subprocess.py-没有这样的文件或目录,python,python-2.7,subprocess,Python,Python 2.7,Subprocess,我正在尝试运行一个旧脚本,它接受一个.mdb文件并将其转换为MySQL数据库。但是,我遇到了一个问题,我收到了以下错误 File "/usr/lib64/python2.7/subprocess.py", line 568, in check_output process = Popen(stdout=PIPE, *popenargs, **kwargs) File "/usr/lib64/python2.7/subprocess.py", line 711, in __init__ e

我正在尝试运行一个旧脚本,它接受一个.mdb文件并将其转换为MySQL数据库。但是,我遇到了一个问题,我收到了以下错误

  File "/usr/lib64/python2.7/subprocess.py", line 568, in check_output
process = Popen(stdout=PIPE, *popenargs, **kwargs)
  File "/usr/lib64/python2.7/subprocess.py", line 711, in __init__
errread, errwrite)
  File "/usr/lib64/python2.7/subprocess.py", line 1327, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory
我曾试图研究此错误,但我所发现的只是修复了该项格式不正确的列表。因此,我修改了调用subprocess.py的受影响代码,并将其更改为以下内容:

def get_external_command_output(command):
    args = shlex.split(command)
    print "################"
    print type(args), args
    ret = subprocess.check_output(args) # this needs Python 2.7 or higher
    return ret
这反过来会返回相同的错误,但也会打印以下消息:

<type 'list'> ['mdb-tables', '-1', '/mnt/data/General/Genit/WIP/IL_Orders.mdb']
['mdb-tables'、'-1'、'/mnt/data/General/Genit/WIP/IL_Orders.mdb']
因此,我可以放心地说,参数被正确地格式化为列表。我真的不确定如何解决这个问题,因为我找到的所有帮助论坛都提出了相同的问题。这个论点不是一个列表。然而,我可以看到我的是

有人能在这里提供一些指导吗?
非常感谢。

原因很多。错误来自底层操作系统(
enoint

最简单的方法是尝试运行相同的东西:

mdb-tables -1 /mnt/data/General/Genit/WIP/IL_Orders.mdb
(或者仅仅是
mdb表
really),看看会发生什么,从shell中得到什么抱怨

可能的原因包括:

正如在评论中提到的那样。如果只是传递一个要运行的可执行文件名,它必须位于
PATH
环境变量中列出的目录之一。或者,您必须使用指向可执行文件的绝对路径或相对于当前工作目录的路径(基于您运行父目录的位置或传递给
子流程的
cwd
参数。检查\u output
call)。例如,
/mdb tables
,如果在运行父脚本时所在的目录或设置了
cwd
的目录中

这也是可能的。特别是,如果是旧脚本。您指定的解释器在主机上不再存在。在这种情况下,将引发相同的错误(
enoint
)。如果直接从shell执行,您可能会看到一条稍有不同的错误消息(提示解释器不正确),但在python中作为子进程调用时,它看起来是相同的


您已经暗示,
mdb表
也是一个脚本。但除此之外,前面的段落也适用于动态链接的ELF二进制文件。如果它们是使用动态链接器(其解释器)的版本(路径)构建的,并且预期该版本(路径)在系统上不再可用。例如,您可以通过运行
objdump-sj来打印所需的动态链接器二进制文件的路径。interp binary\u IN_QUESTION

mdb tables
不在您的计算机上path@PeterWood如中所示,模块是否未安装?我确信我应该得到一个不同的错误,在这种情况下,
子进程
用于创建操作系统进程,而不一定是python进程<代码>mdb表格-1/mnt/data/General/Genit/WIP/IL_Orders。需要从命令行提示符调用mdb。需要在您的系统路径上。tl;我是个傻瓜,没有考虑MDB工具可能不再存在这一事实。我们似乎在最近的一次服务器更换中丢失了该模块,因为当我重新安装所有pip模块时,我忘记了使用yum安装的东西。我的代码很好,没有改变,只是依赖于一些不存在的东西。这个答案让我很满意,所以谢谢你。我的错:(呵呵,是的,文件根本不在那里……这也是一个可能的原因。)