【问题标题】:Python off a Flash Drive, how to start IDLE?Python关闭了一个闪存驱动器,如何启动IDLE?
【发布时间】:2013-08-25 04:21:14
【问题描述】:

我试图从我的闪存驱动器上运行 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。 我不知道如何让批处理文件真正输入到 Python 提示符中,所以我告诉它告诉用户输入需要输入的内容。

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

或者,有没有办法直接进入 IDLE?

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

谢谢!

【问题讨论】:

  • 对不起....我在学校,我还没有时间尝试这个。一旦我可以实际尝试不同的解决方案,我将接受和/或投票......
  • @LorenzoDonati 一年后重访,意识到我忘记接受...失败 =)

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


【解决方案1】:

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

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

它会在不需要用户输入任何内容的情况下启动 IDLE shell。

编辑:顺便说一句,您确定您真的需要更改全局路径设置吗?试试看下面的脚本能否按照你想要的方式启动 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) 创建的进程看到,因为它是执行批处理文件的命令外壳 (cmd.exe) 进程的子进程

线

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

【讨论】:

  • 那么这会带来CLI Python而不用编辑PATH变量吗?
  • 应该的。至少它可以在我的系统上运行,但我现在很少使用 Python,我只是对它进行了表面测试。它会打开 IDLE shell,但如果所有预期的 Python 功能都正常工作,我没有尝试。自己测试一下,看看它是否能解决您的问题。
  • 这些有什么作用? set SCRIPT_DIR=%SCRIPT_DIR:~0,-1% set PYTHON_HOME=%SCRIPT_DIR%\Program Files\Python33 set PATH=%PYTHON_HOME%;%PATH%?最后一点不是编辑 PATH 变量吗?还是用户创建的单独的 PATH 变量?
  • 从您的询问看来,您似乎并不真正知道环境变量是什么(而PATH 只是一个对操作系统具有特殊意义的环境变量)。我建议您在 SO 或 Wikipedia 上搜索或搜索。请参阅下一条评论以获得非常简短的解释。顺便说一句,我的帖子解决了你的问题吗?
  • 你是对的;我真的不知道环境变量是什么;我所知道的是你需要它们用于python。 :)
【解决方案2】:

除非您有足够高的系统权限可以更改全局路径,否则无法保证这是可能的。在您不拥有的大多数计算机上,确实没有办法解决这个问题,我想这是主要目的。在这些情况下,如果您有足够的权限(值得一试,一些系统仍然允许普通用户这样做,但许多其他系统不允许),您可以使用:

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 列和 1 行,用于连接到系统的每个磁盘。为此目的,这是获取大量数据的方式。所以数据被过滤了。 WHERE 导致数据库仅吐出包含某些特定值的行,在这种情况下,它只对列 volumename ins 等于 DRIVENAME 的行感兴趣,同样您可以使用序列号大小或任何其他标准。最后,GET 用于限制您作为结果返回的列,因为您只对您所要求的驱动器的字母名称感兴趣。这被称为表中的标题,以便您问什么。

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

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

【讨论】:

  • 这些行是做什么的?我想我明白了:set cmd=WMIC logicaldisk WHERE volumename^^="%label%" GET captionFOR /F "tokens=1" %%G IN ('%cmd% ^| find ":"')DO set pydrive=%%G
猜你喜欢
  • 2018-10-29
  • 1970-01-01
  • 1970-01-01
  • 2012-08-15
  • 1970-01-01
  • 2015-07-27
  • 2015-10-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多