Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Bash导入Python模块_Python_Linux_Bash_Alias - Fatal编程技术网

从Bash导入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打开(而不是退出),那么正确

我正在Linux下从命令行(Bash)启动一个Python脚本。我需要打开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