【问题标题】:How do you execute python without providing a file name?如何在不提供文件名的情况下执行 python?
【发布时间】:2017-07-27 16:28:07
【问题描述】:

我对 python 比较陌生,所以我想知道是否可以调用 python 从交互式 python shell 外部读取字符串(或它需要执行的代码),类似于在 Python 中 exec() 的工作方式. 基本上,我想知道是否有任何方法可以让 python 从命令行或其他方式读取代码,而不必将该代码保存在“file.py”或其他类似文件中。 我想避免运行这个:python file.py,因为我希望避免需要文件名。 我四处寻找解决方案,发现Execute python commands passed as strings in command line using python -cPython - How do I pass a string into subprocess.Popen (using the stdin argument)?。第一个答案似乎是我想要的,但我缺乏如何将字符串传递到标准输入的知识部门,所以如果有人能更好地解释该方法,如果它是正确的答案,我将不胜感激。第二个链接是我在查找 stdin 时发现的,看起来很有希望,但在执行时我意识到,根据我的理解,我仍然需要某种文件名用于子进程。 我打算使用它以便在 Jupyter Notebook 或任何类似程序中使用,因此当我运行一个数据单元时,它可以在 Python 中执行或返回错误消息,但首先我必须找到了解如何在不需要文件名的情况下引用我想要的语言。感谢您的时间和考虑!

【问题讨论】:

  • 您可以将代码通过管道传输到解释器中。
  • @Klaus D. 你能详细说明一下吗?我曾尝试使用以下代码进行管道传输:def exec_py(code): proc = subprocess.Popen(["python", 'f'], stdin = subprocess.PIPE, stdout=STDOUT, stderr=subprocess.PIPE, shell=False) return_code = proc.wait() proc.stdin.write('code') out = proc.stdout.read() err = proc.stderr.read() if (err): return(err.decode("utf-8")) else: return(out.decode("utf-8")) 其中代码将通过在 Jupyter 中运行单个单元格来给出,但它再次需要一个我无法提供的名为“f”的文件。
  • 只是...不提供文件名?运行python

标签: python python-3.x ipython jupyter-notebook jupyter


【解决方案1】:

有点不清楚你到底想用这个做什么,但这里是使用命令行中的命令选项(-c)而不用管道输入的 hello world。这只是运行传递的字符串,就好像它在 python 中一样解释器或脚本中。

python -c "print('hello world')"

如果你真的想从标准输入运行代码,你可以使用这样的东西:

echo "for i in range(100):\n\tprint(i)" | python -c "import sys;print('hello world');exec(''.join([item for item in sys.stdin]))"

在手册页或python documentation 中有更多关于如何使用命令行工具的信息。

【讨论】:

  • 感谢您的帮助,但我正在寻找一个可以提供多个字符串的答案。我在stackoverflow.com/questions/10768584/… 中找到了该方法,但正如第一个响应所述,它不能打印多个字符串。 python -c "x = 'hello', print(x)" 似乎不起作用。你知道如何将 python 代码传递到标准输入,显然这是答案,但我不熟悉它
  • 这行不通,但 python -c "x = 'hello';print(x)" 可以
【解决方案2】:

您可以使用以下内容:

python -c "my_var = 'my name is john';print(my_var)"

请注意

1) 使用 ;你把命令分开。

2) 你需要使用 " " 和 inside 来输入命令。

【讨论】:

    猜你喜欢
    • 2019-08-18
    • 2017-08-01
    • 2021-12-29
    • 1970-01-01
    • 2010-10-10
    • 1970-01-01
    • 2018-11-03
    • 1970-01-01
    • 2021-07-16
    相关资源
    最近更新 更多