Skip to content

IPython - 系统命令

IPython 提供了与底层操作系统 shell(如 bash、zsh 或 Windows 命令提示符)的无缝集成。这允许你直接在 IPython 会话中运行系统命令,而无需离开当前环境。

要执行系统命令,只需在其前面加上一个感叹号 (!)。IPython 将在一个子 shell 中运行该命令,并将其标准输出(和标准错误)直接显示在你的会话中。

# 在 Linux/macOS 上:
!pwd
# 输出: (例如) /home/user/current_project
!ls -l *.py
# 输出: (列出当前目录下的 Python 文件)
# 在 Windows 上:
!cd
# 输出: (例如) C:\Users\User\current_project
!dir *.txt
# 输出: (列出当前目录下的文本文件)

你可以将 shell 命令的输出捕获到一个 Python 变量中。将命令(前面加上 !)赋值给一个变量名。

# 在 Linux/macOS 上
files = !ls
print(files)
# 输出: (例如) ['data.csv', 'notebook.ipynb', 'script.py']
# 在 Windows 上
files = !dir /b
print(files)
# 输出: (例如) ['data.csv', 'notebook.ipynb', 'script.py']

输出通常被捕获为一个字符串列表(IPython 的 SList 类型,其行为类似于列表但有额外的方法),命令输出的每一行都成为列表中的一个元素。换行符通常会被移除。

你可以使用花括号 {} 或在变量名前加上美元符号 $,将 Python 变量直接嵌入到你的 shell 命令中。

filename = 'my_data.txt'
message = 'Processing complete.'
# 使用花括号
!echo "Processing {filename}" > status.log
# 使用美元符号 (适用于简单的变量名)
!echo $message >> status.log
# 验证文件内容 (Linux/macOS)
!cat status.log
# 输出:
# Processing my_data.txt
# Processing complete.

这个强大的特性允许你根据 Python 程序的当前状态动态地构建 shell 命令,从而实现与系统的复杂交互。