代码之家  ›  专栏  ›  技术社区  ›  Dreams

正在运行子进程。来自python脚本的调用

  •  0
  • Dreams  · 技术社区  · 8 年前

    我有一个功能,需要在python脚本中运行命令。从另一个答案来看,我想 call from subprocess module

    这是我尝试的较小版本:

    import subprocess
    a = "echo hello"
    subprocess.call([a])
    

    它给了我以下错误:

     subprocess.call([a])
      File "/usr/lib/python2.7/subprocess.py", line 522, in call
        return Popen(*popenargs, **kwargs).wait()
      File "/usr/lib/python2.7/subprocess.py", line 710, in __init__
        errread, errwrite)
      File "/usr/lib/python2.7/subprocess.py", line 1327, in _execute_child
        raise child_exception
    OSError: [Errno 2] No such file or directory
    

    我不知道为什么!

    2 回复  |  直到 8 年前
        1
  •  1
  •   Jean-François Fabre    8 年前

    您可以将命令作为 或者 列表 但不能作为列表中的字符串,否则系统将尝试运行 echo hello 过程(显然不存在,这解释了 OSError: [Errno 2] No such file or directory 错误消息)。将其作为字符串传递需要 shell=True 在某些系统上。

    对于shell内置,如 echo 命令(在 /bin 在某些系统上,只是为了增加混乱)

    import subprocess
    subprocess.call(["echo","hello"],shell=True)
    

    这里只是一个测试),避免 外壳=真 ,因为它添加了一个不必要的外壳层,这会降低启动性能,并且容易出现代码注入( echo hello; rm -rf everything_on_disk)

    subprocess.call(["emacs","readme.txt"])
    
        2
  •  1
  •   user3778137 user3778137    8 年前

    您编写的代码有问题,子流程。调用接收列表,其中列表的第一个元素是命令。对你来说是这样的 echo hello

    import subprocess
    
    a = [ "echo","hello"]
    subprocess.call(a)