我正在尝试使用IPython进行一些脚本编写,但我发现它在脚本中的行为与我运行交互式shell时的行为完全不同。
例如,我可以以交互方式运行以下内容:
In [1]: %profile
default
In [2]: ls /
bin/ cdrom/ etc/ initrd.img@ lib/ lib64/ media/ opt/ root/ sbin/ sys/ usr/ vmlinuz@
boot/ dev/ home/ initrd.img.old@ lib32/ lost+found/ mnt/ proc/ run/ srv/ tmp/ var/ vmlinuz.old@
In [3]: mkdir tmpdir
In [4]: cd tmpdir
/home/alex/tmp/tmpdir
没问题。
但是,当我在脚本中运行它们时,这些命令都不起作用:
#!/usr/bin/ipython3
%profile
ls /
mkdir tmpdir
cd tmdir
我收到错误:
$ ./tmp.py
File "/home/alex/tmp/tmp.ipython", line 3
%profile
^
SyntaxError: invalid syntax
我试过通过以下方式运行:
-i
或--profile=sh
参数传递给ipython
.ipython
和.ipy
我的问题: 为什么脚本在shell中的行为有所不同?如何让IPython在脚本中运行这些命令?
答案 0 :(得分:1)
他们正在使用IPython magic,但它们是shell命令,不适用于Python。让他们考虑subprocess
library。如果在shell命令中有空格,则在列表中使用逗号分隔值。
import subprocess
subprocess.check_call(['ls'])
subprocess.check_call(['ls', '-a'])