Command-line options to IPython *scripts*?

2019-01-31 00:07发布

I am often asked to debug Python scripts written by others. I would like to send these scripts to IPython so it will drop into an IPython shell at the point the script fails.

Unfortunately, I cannot find a way to send (required) command-line options required by the scripts.

IPython assumes everything in is for IPython when I pass the script and its options as:

ipython <script_name> <script_options>

Is there a solution or workaround?

5条回答
在下西门庆
2楼-- · 2019-01-31 00:39

I know there's an already accepted solution, but in the most recent version of ipython this won't work. Here's a cut and paste of the command I use to run tornado tests with --autoreload

ipython --c="%run test.py --autoreload"

This is using ipython .11.

查看更多
不美不萌又怎样
3楼-- · 2019-01-31 00:40
ipython -- sometest.py 1 2 3 4
查看更多
戒情不戒烟
4楼-- · 2019-01-31 00:45

Simple example here.

script.py

from sys import argv

script, first, second, third = argv

print "The script is called:", script
print "Your first variable is:", first
print "Your second variable is:", second
print "Your third variable is:", third

shell:

$ ipython script.py stuff things that
The script is called: ex13.py
Your first variable is: stuff
Your second variable is: things
Your third variable is: that
查看更多
老娘就宠你
5楼-- · 2019-01-31 00:56

Many aspects of IPython's behavior can be controlled via settings in the user's IPython config files, which typically are in ~/.ipython/. A user can create multiple profiles, each with different settings of the config parameters. Each profile has its settings in a separate folder in the .ipython folder. The default profile is in profile_default, and the main file in there for customizing behavior is ipython_config.py. By default, it is almost entirely commented, with commented lines showing the config variables and their default settings. Uncomment or insert lines to alter behavior.

To change how IPython behaves at the end of running a script, use:

c.TerminalIPythonApp.force_interact = True

Then when the script ends (or raises an exception), IPython will keep running and present you with a prompt. This is the same behavior as ipython -i.

I use this setting in my default profile, because this is the way I always want IPython to behave. If that's not the case for you, you could create a profile with this behavior, to use just when you want this behavior. Or just keep using the (evidently undocumented) -i option.

IPython configuration documentation is available here: Introduction to IPython configuration — IPython documentation, with the force_interact option described here: Terminal IPython options — IPython documentation.

查看更多
叛逆
6楼-- · 2019-01-31 00:59
ipython -i -c "%run test.py 1 2 3 4"
查看更多
登录 后发表回答