从Bash导入Python模块
我正在Linux下从命令行(Bash)启动一个Python脚本。我需要打开Python,导入模块,然后解释代码行。然后,控制台必须保持在Python中(而不是退出它)。我该怎么做 我尝试过这样的别名:从Bash导入Python模块,python,linux,bash,alias,Python,Linux,Bash,Alias,我正在Linux下从命令行(Bash)启动一个Python脚本。我需要打开Python,导入模块,然后解释代码行。然后,控制台必须保持在Python中(而不是退出它)。我该怎么做 我尝试过这样的别名: alias program="cd /home/myname/programs/; python; import module; line_of_code" 但这只会启动python,并且不会执行命令(没有模块导入,没有处理代码行) 如果脚本执行后需要保持Python打开(而不是退出),那么正确
alias program="cd /home/myname/programs/; python; import module; line_of_code"
但这只会启动python,并且不会执行命令(没有模块导入,没有处理代码行)
如果脚本执行后需要保持Python打开(而不是退出),那么正确的方法是什么?
非常感谢 示例:
python -c "import time ; print 'waiting 2 sec.'; time.sleep(2); print 'finished' "
一个简单的方法是使用“代码”模块: 调用code.interactive()时,这将使您进入一个交互式shell。
interact
的local
关键字参数用于为创建的解释器预填充默认名称空间;我们将使用locals()
,这是一个内置函数,将本地名称空间作为字典返回
您的命令如下所示:
python -c "import mymodule, code; code.interact(local=locals())"
这将使您进入具有正确环境的解释器。使用子例程而不是别名
callmyprogram(){
python -i -c "import time;print time.localtime()"
}
callmyprogram
@Karol Thx,但我必须留在控制台中的Python中,因为这是一个交互式脚本。我编辑了这个问题以添加此内容。如果您需要保持“在”python中,请使用
-I
标志启动解释器。我尝试使用-I(带或不带c-),但我得到了一个提示:“python:无法打开文件‘导入模块’:[Errno 2]没有这样的文件或目录”@Morlock:您说“既然这是一个交互式脚本”,这是什么意思?通常情况下,您可以在不在控制台中的情况下使用交互式脚本。@Dennis Williamson我想打开一个控制台,键入“myprogram”,然后Python打开,导入给定的模块,可能是一行或两行脚本,最后留在Python控制台中,并将手交还给用户。用户现在可以在控制台上使用带有“>>>”Python提示符的程序了。这只起到一半的作用。我在“导入代码”之前或之后添加了我的导入模块,但在交互式python控制台中,我的模块不可用。我认为代码模块可以做你想做的事情,但你必须像这样引导环境:python-c“import sys,code;code.interact(local=locals())”这会让我看到一个命令shell,它允许我执行:>>>print sys.argv[0]这更接近您要执行的操作吗?太好了!这是我的工作。我自己的模块现在也已加载(导入系统、代码、mymodule;…)谢谢!如果我还想执行一些代码呢python-c“导入mymodule,code;code.interact(local=locals());print('ciao')”
将不起作用。@Alain1405-一旦调用code.interact(…)
,您就进入了交互会话。如果要在进入交互式会话之前运行代码,则必须将其放在调用code.interact(…)
之前。如果您想在交互会话结束后但在解释器退出之前执行代码,您可以在Linux上使用CTRL-d
,或在Windows上使用CTRL-z+Enter
,然后在终端上看到“ciao”消息。@ghostdog74我以前从未使用过子例程。我把这个放在哪里?在.bashrc文件中?(.bash_bashrc,因为我使用的是LinuxMint)然后如何启动它?你可以把它放在任何脚本中。因为您有.bash\u bashrc
,所以可以将它放在那里。如果您想使用子例程,只需执行source.bash\u bashrc
+
callmyprogram(){
python -i -c "import time;print time.localtime()"
}
callmyprogram