在脚本中运行IPython

时间:2016-03-04 00:21:42

标签: python shell ipython

我正在尝试使用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

我试过通过以下方式运行:

  1. 如上所述直接调用文件,
  2. 使用ipython显式调用它:`ipython3 tmp.py'
  3. 使用ipython
  4. -i--profile=sh参数传递给ipython
  5. 将文件扩展名更改为.ipython.ipy
  6. 我的问题: 为什么脚本在shell中的行为有所不同?如何让IPython在脚本中运行这些命令?

1 个答案:

答案 0 :(得分:1)

他们正在使用IPython magic,但它们是shell命令,不适用于Python。让他们考虑subprocess library。如果在shell命令中有空格,则在列表中使用逗号分隔值。

import subprocess
subprocess.check_call(['ls'])
subprocess.check_call(['ls', '-a'])