<small id='5kNNb'></small><noframes id='5kNNb'>

    <i id='5kNNb'><tr id='5kNNb'><dt id='5kNNb'><q id='5kNNb'><span id='5kNNb'><b id='5kNNb'><form id='5kNNb'><ins id='5kNNb'></ins><ul id='5kNNb'></ul><sub id='5kNNb'></sub></form><legend id='5kNNb'></legend><bdo id='5kNNb'><pre id='5kNNb'><center id='5kNNb'></center></pre></bdo></b><th id='5kNNb'></th></span></q></dt></tr></i><div id='5kNNb'><tfoot id='5kNNb'></tfoot><dl id='5kNNb'><fieldset id='5kNNb'></fieldset></dl></div>
    • <bdo id='5kNNb'></bdo><ul id='5kNNb'></ul>

      1. <legend id='5kNNb'><style id='5kNNb'><dir id='5kNNb'><q id='5kNNb'></q></dir></style></legend>
      2. <tfoot id='5kNNb'></tfoot>
      3. Python字符串作为子进程的文件参数

        Python string as file argument to subprocess(Python字符串作为子进程的文件参数)

        <small id='jjB1j'></small><noframes id='jjB1j'>

            <tbody id='jjB1j'></tbody>
          • <legend id='jjB1j'><style id='jjB1j'><dir id='jjB1j'><q id='jjB1j'></q></dir></style></legend>

          • <tfoot id='jjB1j'></tfoot>

              <i id='jjB1j'><tr id='jjB1j'><dt id='jjB1j'><q id='jjB1j'><span id='jjB1j'><b id='jjB1j'><form id='jjB1j'><ins id='jjB1j'></ins><ul id='jjB1j'></ul><sub id='jjB1j'></sub></form><legend id='jjB1j'></legend><bdo id='jjB1j'><pre id='jjB1j'><center id='jjB1j'></center></pre></bdo></b><th id='jjB1j'></th></span></q></dt></tr></i><div id='jjB1j'><tfoot id='jjB1j'></tfoot><dl id='jjB1j'><fieldset id='jjB1j'></fieldset></dl></div>

                • <bdo id='jjB1j'></bdo><ul id='jjB1j'></ul>
                  本文介绍了Python字符串作为子进程的文件参数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                  问题描述

                  我正在尝试将文件传递给我作为 Python 子进程启动的程序 (MolPro).

                  I am trying to pass a file to a program (MolPro) that I start as subprocess with Python.

                  它最常用的是一个文件作为参数,就像在控制台中这样:

                  It most commonly takes a file as argument, like this in console:

                  path/molpro filename.ext
                  

                  其中 filename.ex 包含要执行的代码.或者一个 bash 脚本(我正在尝试做的,但是在 Python 中):

                  Where filename.ex contains the code to execute. Alternatively a bash script (what I'm trying to do but in Python):

                  #!/usr/bin/env bash
                  path/molpro << EOF
                      # MolPro code
                  EOF
                  

                  我正在尝试在 Python 中执行上述操作.我试过这个:

                  I'm trying to do the above in Python. I have tried this:

                  from subprocess import Popen, STDOUT, PIPE
                  DEVNULL = open('/dev/null', 'w')  # I'm using Python 2 so I can't use subprocess.DEVNULL
                  StdinCommand = '''
                      MolPro code
                  '''
                  
                  # Method 1 (stdout will be a file)
                  Popen(['path/molpro', StdinCommand], shell = False, stdout = None, stderr = STDOUT, stdin = DEVNULL)
                  # ERROR: more than 1 input file not allowed
                  
                  # Method 2
                  p = Popen(['path/molpro', StdinCommand], shell = False, stdout = None, stderr = STDOUT, stdin = PIPE)
                  p.communicate(input = StdinCommand)
                  # ERROR: more than 1 input file not allowed
                  

                  所以我很确定输入看起来不够像文件,但即使查看 Python - 如何将字符串传递给 subprocess.Popen(使用 stdin 参数)? 我找不到我在做什么错了.

                  So I am pretty sure the input doesn't look enough like a file, but even looking at Python - How do I pass a string into subprocess.Popen (using the stdin argument)? I can't find what Im doing wrong.

                  我不喜欢:

                  • 将字符串写入实际文件
                  • 将 shell 设置为 True
                  • (而且我无法更改 MolPro 代码)

                  非常感谢您的帮助!

                  更新:如果有人试图做同样的事情,如果你不想等待工作完成(因为它不会返回任何东西,无论哪种方式),使用 p.改为 stdin.write(StdinCommand).

                  推荐答案

                  如果您从 Popen() 参数中删除 StdinCommand,您的第二种方法似乎应该有效:

                  It seems like your second method should work if you remove StdinCommand from the Popen() arguments:

                  p = Popen(['/vol/thchem/x86_64-linux/bin/molpro'], shell = False, stdout = None, stderr = STDOUT, stdin = PIPE)
                  p.communicate(input = StdinCommand)
                  

                  这篇关于Python字符串作为子进程的文件参数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                  本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!

                  相关文档推荐

                  Initialize Multiple Numpy Arrays (Multiple Assignment) - Like MATLAB deal()(初始化多个 Numpy 数组(多重赋值) - 像 MATLAB deal())
                  How to extend Python class init(如何扩展 Python 类初始化)
                  What#39;s the difference between dict() and {}?(dict() 和 {} 有什么区别?)
                  What is a wrapper_descriptor, and why is Foo.__init__() one in this case?(什么是 wrapper_descriptor,为什么 Foo.__init__() 在这种情况下是其中之一?)
                  Initialize list with same bool value(使用相同的布尔值初始化列表)
                  setattr with kwargs, pythonic or not?(setattr 与 kwargs,pythonic 与否?)

                    <i id='wwsCw'><tr id='wwsCw'><dt id='wwsCw'><q id='wwsCw'><span id='wwsCw'><b id='wwsCw'><form id='wwsCw'><ins id='wwsCw'></ins><ul id='wwsCw'></ul><sub id='wwsCw'></sub></form><legend id='wwsCw'></legend><bdo id='wwsCw'><pre id='wwsCw'><center id='wwsCw'></center></pre></bdo></b><th id='wwsCw'></th></span></q></dt></tr></i><div id='wwsCw'><tfoot id='wwsCw'></tfoot><dl id='wwsCw'><fieldset id='wwsCw'></fieldset></dl></div>

                    <small id='wwsCw'></small><noframes id='wwsCw'>

                      <bdo id='wwsCw'></bdo><ul id='wwsCw'></ul>
                      1. <tfoot id='wwsCw'></tfoot>

                        <legend id='wwsCw'><style id='wwsCw'><dir id='wwsCw'><q id='wwsCw'></q></dir></style></legend>
                          <tbody id='wwsCw'></tbody>