python - 是否可以访问在标准输入中传递给 python 的 python 脚本的源代码?

标签 python stdin quine

这是一个随机问题,更多的是出于好奇而不是任何特定需要。

是否可以编写一些 python 代码来打印一些东西,包括源代码本身,而无需将 python 代码存储在文件中?例如,在 Bash 提示符下做这样的事情:

$ echo '
> print "The Code:"
> PrintScript() # What would this function look like?
> for i in range(5):
>     print i,
> print "!"
> ' | python

得到这样的输出:

The Code:
print "The Code:"
PrintScript() # What would this function look like?
for i in range(5):
    print i,
print "!"
0 1 2 3 4 5 !

我怀疑这可能无法完成,但考虑到 python 的自省(introspection)能力,我很好奇它是否扩展到这个级别。

最佳答案

这是我得到的最接近的:

echo 'import  __main__,inspect;print inspect.getsource(__main__)' | python

失败了...无论如何,原始代码在启动时被解释器吃掉(从标准输入读取)。最多您可能能够再次通过 __main__ 模块访问编译后的代码。

更新:

dis 模块应该为您提供模块中所有函数的反汇编,但即使是那个模块也看不到任何代码:

$ echo -e 'import  __main__,dis;print dis.dis(__main__)' | python
None

甚至当我抛出一个函数时:

$ echo -e "import  __main__,dis;print dis.dis(__main__)\ndef x():\n pass" | python
None

关于python - 是否可以访问在标准输入中传递给 python 的 python 脚本的源代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3147823/

相关文章:

python - 使用 scipy 插值闭合曲线

python - 如何截断一个numpy数组?

file - ffmpeg:哪些文件格式支持标准输入使用?

linux - 你能用 bash/sh 脚本 quine 写一个简单的每周提醒吗?

java - self 复制的程序

python - 将用户导入到 USER 模型时 Django 中的密码加密

python - 获取请求期间的字节数

stream - 如何使用 Stream.iter 在 OCaml 中处理来自标准输入的行

c++ - 使用 C++ 将 STDIN 数据读入控制台应用程序的最快方法是什么

c - 调用自身的宏打印自身?