擅长:python、mysql、java
<p><code>subprocess</code>确实是您想要实现的正确模块。但让我们看看你在这里做什么:</p>
<p><code>with open(os.path.join("path/to/dir","RSIcalc.mq5")) as f</code></p>
<p>您正在创建一个名为<code>f</code>的<em>文件描述符句柄</em>,用于从文件中写入或读取内容。如果执行<code>print(f)</code>,您将看到它是一个python对象,转换为字符串的对象看起来像<code><_io.TextIOWrapper name='RSIcalc.mq5' mode='r' encoding='UTF-8'></code>。<em>极不可能</em>这样的字符串是您想要作为命令行参数</em>传递给终端可执行文件的字符串,这是您在对^{<cd6>的调用中包含该字符串时发生的情况</p>
<p>您可能想做的是:</p>
<pre class="lang-py prettyprint-override"><code>full_path = os.path.abspath(os.path.join("path/to/dir","RSIcalc.mq5"))
result = subprocess.run([r"C:\Program Files\MetaTrader 5\terminal64.exe", full_path], capture_output=True)
</code></pre>
<p>现在,假设terminal64可以执行作为参数传递的任意脚本。这可能是真的,也可能不是真的-在传递文件路径之前,您可能需要额外的参数,如“-f”,或者您可能必须通过stdin管道提供脚本内容(在Windows上不太可能,但谁知道呢)。这需要你去弄清楚,但我上面的代码应该是你的出发点</p>