关闭Flash Drive的Python,如何启动IDLE?

时间:2013-08-25 04:21:15

标签: python windows batch-file python-3.x usb-flash-drive

我试图从我的闪存驱动器上运行Python 3.3。我已经尝试过Portable Python了,但它的大部分内容都无法打开,而且它让我的笔记本电脑崩溃了。

所以,我删除了它,并安装了常规的Python。然后,我想开始添加我最喜欢的模块。并且,我需要一种方法来启动IDLE,而无需原始快捷方式。

要安装模块,我将Python安装添加到PATH变量中。

为了简化这一切,我使用this question上找到的一些代码创建了一个批处理文件。

到目前为止,我有这个。它还要求驱动器号,因为它从计算机变为计算机。

@echo off
echo This only works if your Python install is added to the system-wide PATH variable
set /p Path="Enter the Drive Letter on this computer. No Symbols, Just the Letter, Capital"
cd %Path%:\Program Files\Python33
echo type this when python comes up...
echo import idlelib.PyShell
echo idlelib.PyShell.main()
echo.
echo.
echo.
echo.
python

它输出: IDLE Bringer Output

如果您继续按照说明操作并输入内容,则会显示IDLE。 我无法弄清楚如何让批处理文件实际输入到Python提示符中,所以我告诉用户输入需要键入的内容。

我需要知道的是,如何从批处理文件中更改PATH变量。另外,当我完成后如何删除它(这不是那么重要,甚至可以在一个单独的批处理文件中)。

或者,或者,有没有办法快捷到IDLE?

另外,有没有办法在没有命令行的情况下运行.py文件,在我的闪存驱动器上安装Python?

谢谢!

2 个答案:

答案 0 :(得分:3)

您可以使用以下命令行调用Python:

python -c"import idlelib.PyShell;idlelib.PyShell.main()"

它将启动IDLE shell而无需用户输入任何内容。

修改:BTW,您确定需要来更改全局路径设置。尝试查看以下脚本是否可以按您希望的方式启动Python。您必须将它放在安装Python的USB驱动器的根目录中。

@echo off
setlocal
set SCRIPT_DIR=%~dp0
:: Removes trailing backslash (for readability in the following)
set SCRIPT_DIR=%SCRIPT_DIR:~0,-1%
set PYTHON_HOME=%SCRIPT_DIR%\Program Files\Python33
set PATH=%PYTHON_HOME%;%PATH%
"%PYTHON_HOME%\python.exe" -c"import idlelib.PyShell;idlelib.PyShell.main()"

编辑:每个进程都有一个关联的环境,它是一组名为环境变量的名称 - 值对。当进程启动时,它会获取其父进程的环境副本。环境变量的全局OS设置用于直接从OS(GUI或命令行)shell启动的进程。批处理文件中的set命令在当前进程的环境中设置或修改环境变量(不是全局的)。

您在上面的脚本中看到的所有set命令只会更改当前进程的环境。这些更改将由最后一行(python.exe)创建的进程看到,因为它是执行批处理的命令shell(cmd.exe)进程的子进程 -file。

该行

set PATH=%PYTHON_HOME%;%PATH%

PYTHON_HOME变量的内容添加到当前进程的PATH变量中。例如,如果PATHc:\foo\bar;d:\aaa\bbbPYTHON_HOMEc:\python,那么PATH的新值将为c:\python;c:\foo\bar;d:\aaa\bbb

答案 1 :(得分:0)

除非您具有足够高的系统权限以便可以更改全局路径,否则无法保证这是可能的。在你不拥有的大多数计算机上实际上没有办法解决这个问题,我认为这是主要目的。在那些你拥有足够权限的情况下(值得尝试一些系统仍允许常规用户使用,但许多其他系统不允许),你可以使用:

setx PATH "%path%;yourpath"

编辑和ps:

如果你知道磁盘标签,你可以找出没有输入的驱动器号,如下所示:

@echo off
set label=DRIVENAME
set cmd=WMIC logicaldisk WHERE volumename^^="%label%" GET caption


FOR /F "tokens=1" %%G IN ('%cmd% ^| find ":"')DO set pydrive=%%G

echo %pydrive%\pathtopython
rem do your stuff here

批处理内部启动的空闲将继承路径,但其他实例不会。很难测试坚决。

上面的批处理脚本的说明。命令 wmic 是Windows管理工具命令行的简称。可以使用WMI做很多事情,其中​​之一是发出WQL(SQL for WMI)查询,好像windows将是一个数据库。在这种情况下,数据库包含许多表,指示计算机获取名为 logicaldisk 的表。对于连接到系统的每个磁盘,表 logicaldisk 有38列和一行。这是为此目的提供大量数据的方法。所以数据被过滤了。 WHERE 导致数据库仅吐出包含某些特定值的行,在这种情况下,它只对列volumename ins等于DRIVENAME的行感兴趣,同样可以使用序列号大小或任何其他条件。最后, GET 用于限制您收到的列作为结果,因为您只对所要求的驱动器的字母名称感兴趣。这被称为表格中的标题,以便您提出要求。

由于命令有点长,所以我将命令放在一个变量(不是结果)中,这缩短了for行,因此它适合堆栈溢出。由于=需要转义,我需要使用转义序列^太多次,所以它仍然能够在for循环中。

for循环用于捕获wmic命令的返回值。由于答案有很多行,我只过滤包含冒号字符的行。并把它放到变量pydrive。