带有变量的Python子进程调用

这个问题已经在这里有了答案:            >            OSError: [Errno 2] No such file or directory while using python subprocess in Django                                    1个
我目前正在为客户编写脚本.

该脚本从配置文件读取.
然后将其中一些信息存储在变量中.

之后,我想使用subprocess.call执行安装命令
所以我正在使用这些变量来构建mount命令

call("mount -t cifs //%s/%s %s -o username=%s" % (shareServer, cifsShare, mountPoint, shareUser))

但是,这不起作用

Traceback (most recent call last):
  File "mount_execute.py", line 50, in <module>
    main()
  File "mount_execute.py", line 47, in main
    call("mount -t cifs //%s/%s %s -o username=%s" % (shareServer, cifsShare, mountPoint, shareUser))
  File "/usr/lib64/python2.6/subprocess.py", line 470, in call
return Popen(*popenargs, **kwargs).wait()
  File "/usr/lib64/python2.6/subprocess.py", line 623, in __init__
errread, errwrite)
  File "/usr/lib64/python2.6/subprocess.py", line 1141, in _execute_child
   raise child_exception
 OSError: [Errno 2] No such file or directory

首先使用以下命令

mountCommand = 'mount -t cifs //%s/%s %s -o username=%s' % (shareServer, cifsShare, mountPoint, shareUser)
call(mountCommand)

也会导致相同的错误.

解决方法:

您当前的调用是为与shell = True一起使用而编写的,但实际上并未使用它.如果您确实想使用需要用shell解析的字符串,请使用call(yourCommandString,shell = True).

更好的方法是传递一个显式参数列表-使用shell = True使命令行解析取决于数据的详细信息,而传递显式列表意味着您自己做出解析决定(作为了解您正在运行的命令的人员更适合这样做).

call(['mount',
      '-t', 'cifs',
      '//%s/%s' % (shareServer, cifsShare),
      mountPoint,
      '-o', 'username=%s' % shareUser])
上一篇:Python子进程:与Shell脚本进行交互


下一篇:元素 "context:component-scan" 的前缀 "context" 未绑定的解决方案