【问题标题】:Python shell execution programatically以编程方式执行 Python shell
【发布时间】:2021-01-09 13:01:46
【问题描述】:

我需要以编程方式在 shell 上运行时运行 python 命令,它几乎复制了 REPL,但以编程方式,我尝试了下面的代码,该代码适用于第一行,但它没有像 CLI 那样承载会话,请帮助

import subprocess as s
import sys
res=s.run([sys.executable, "-c", "a=5"])
s.run([sys.executable, "-c", "print(a)"])

错误:

Traceback (most recent call last):
  File "<string>", line 1, in <module>
NameError: name 'a' is not defined

我收到错误,因为这 2 个命令正在 2 个不同的进程中执行,有什么方法可以在一个进程中运行但在不同的行中运行(类似于我们在 python 解释器(REPL)中所做的),我正在工作关于从一些外部文件中捕获python命令并在shell上运行它们的要求,所以在它实际出现在外部文件中之前我不会知道我将执行什么命令。

[![在此处输入图片描述][2]][2]

【问题讨论】:

  • 你认为错误信息试图告诉你什么?
  • 变量不会在 Python 解释器的两次单独执行中持续存在。第一次执行中的a=5 与第二次无关,这就是为什么您会得到NameError。我不完全清楚你想要做什么,所以我没有任何特别的建议给你。
  • @larsks 感谢您的回复,有没有办法在一次执行中运行但在不同的行(类似于我们在 python 解释器(REPL)中所做的),我正在处理捕获的要求python 命令来自一些外部文件并在 shell 上运行它们,所以在它实际出现在外部文件中之前我不会知道我将执行什么命令。
  • 我现在对您的最佳建议是更新问题以清楚地展示您要完成的工作。人们不一定会看到您的评论,即使有该评论,我也不完全确定您要做什么。

标签: python subprocess command-line-interface read-eval-print-loop


【解决方案1】:

您可以使用Popensubprocessstdin 正在等待您的命令。

import subprocess as s
import sys
res=s.Popen(sys.executable, stdin=s.PIPE)
res.stdin.write(b"a=5\n")
res.stdin.write(b"print(a)")

【讨论】:

  • 感谢您的回复,但它没有打印任何值。请帮忙
  • @NewDev 我已经测试过它正在打印输出。你如何运行文件?
  • 我是从 pyCharm 运行的,我已附上问题的截图,请看一下
  • 请在命令行运行。 python test_Selenium.py
  • 太棒了,感谢您的帮助
猜你喜欢
  • 2013-01-26
  • 2014-05-17
  • 1970-01-01
  • 1970-01-01
  • 2017-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多