python - 采购 python 脚本

标签 python linux bash shell

最近,我遇到了 Linux 命令 source 然后找到了 this answer关于它的作用。

我的理解是 source 执行传递给它的文件,它确实适用于一个简单的 shell 脚本。然后我尝试在 Python 脚本上使用 source,但它没有用。

Python 脚本有一个 shebang(例如 #!/usr/bin/python),我可以执行 ./python.py,因为脚本有可执行权限。如果可以的话,source python.py 也应该可以吧?唯一的区别是 ./ 在新的 shell 中执行,而 source 在当前的 shell 中执行。为什么它不适用于 .py 脚本?我在这里错过了什么吗?

最佳答案

您仍然没有完全理解 source 的作用。

source 确实从当前 shell 进程中的文件执行命令。它可以有效地执行此操作,就好像您将它们直接输入到当前的 shell 中一样。

这是必要的原因是因为当您运行一个 shell 脚本而不获取它时,它会产生一个子 shell — 一个新进程。当此进程退出时,当您返回到生成它的 shell 时,在该脚本中所做的任何更改都将丢失。

因此,您不能将 Python 源代码放入 shell,因为 Python 解释器始终是与您的 shell 不同的进程。运行 Python 脚本会产生一个全新的进程,当该进程退出时,其状态将丢失。

当然,如果您的 shell 实际上是 Python(我不推荐!),您仍然可以通过使用 import“源”到它。

关于python - 采购 python 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18577555/

相关文章:

python - 将整数列表转换为字符串

python - 我如何告诉 matplotlib 我完成了一个情节?

php - PDF 缩略图 shell 命令问题 - PHP

linux - 使用十六进制位置从文件中删除行

linux - 多个脚本使休息调用干扰

正则表达式(或 bash),获取引号之间的管道(perl)

python - 扭曲的重写方法?

python - 如何将 LabelEncoder 应用于 Pandas 数据框中的特定列

linux - Eclipse 在预构建中定义构建变量

使用字符设备驱动程序捕获信号和暂停