从PowerShell语法错误运行Python脚本

时间:2015-12-13 18:23:22

标签: python windows powershell

以下是该问题的摘要以及有关操作系统,系统环境变量的相关信息。

启动PowerShell后,屏幕显示

Windows Powershell  
Copyright © 2009 Microsoft Corporation  
PS C:\Users>

我的输入是:

Python 

输出是:

Python 2.7.4 default Apr 8 2013 19:54:46) [MSC v.1500 32 bit (Intel)] on win32"  
Type “help” ……etc.

我的下一个输入是:

Python CleanupStops.py 

输出是:

File <stdin>,line 1  
Python CleanupStops.py  
              ^ "  
Syntax Error: invalid syntax"   

该脚本位于系统环境变量中设置的目录pyscripts中,如下所示。

C:\Python27;C:\Python27\Tools\Scripts\pyscripts;C:\Python27\Lib\site-packages; 

请注意,我的操作系统是64位SPI,而Python 2.7.4是32位英特尔。

操作系统:

  • Windows 7 Professional 64位SP1
    安装日期:2015年4月3日下午10:13:51

安装了.NET框架:

  • v4.5完整
  • v4.5客户
  • v3.5 SP1
  • v3.0 SP2
  • v2.0 SP2

1 个答案:

答案 0 :(得分:4)

您的第一个>>> import os >>> os.system('.\\CleanupStops.py')语句以交互模式启动了Python解释器。如果你想从那里运行Python脚本,你需要这样的东西(假设文件在当前目录中):

exit()

键入python CleanupStops.py并按 Enter 退出交互式解释器。

如果要直接从PowerShell或CMD运行Python脚本,则使用语句PS C:\> python C:\Python27\Tools\Scripts\pyscripts\CleanupStops.py

PS C:\> Set-Location C:\Python27\Tools\Scripts\pyscripts
PS C:\Python27\Tools\Scripts\pyscripts> python CleanupStops.py

.py

如果在安装过程中将PS C:\> CleanupStops.py文件与Python解释器相关联,您甚至可以直接运行Python脚本(无需明确指定解释器),正如@tdelaney在您的问题的评论中所指出的那样:

$env:Path

但请注意,后者(在没有解释器和路径的情况下调用脚本)仅在包含该脚本的目录列在.py环境变量中时才会起作用(并且列出了扩展名$env:PATHEXT$env:Path变量中,正如@eryksun在评论中指出的那样)。如果PS C:\Python27\Tools\Scripts\pyscripts> .\CleanupStops.py中未列出该目录,则需要使用其绝对或相对路径调用脚本。

[environment]::SetEnvironmentVariable('Path', "$env:Path;C:\python27", 'Machine')
[environment]::SetEnvironmentVariable('PATHEXT', "$env:PATHEXT;.py", 'Machine')
cmd /c 'assoc .py=Python.File'
cmd /c 'ftype Python.File="C:\python27\python.exe" "%1" %*'

如果安装程序没有正确准备环境,您可以轻松自行完成。只需从提升的PowerShell提示符运行以下4个语句:

  // Get duration and store it in the DB
  let audio = document.createElement('audio');

  audio.addEventListener('loadedmetadata', function ({target}) {
    audio.pause();
    audio.currentTime = 0;
    audio.volume = 1;

    Meteor.call('util/setTrackDuration', track._id, target.duration);
  });
  audio.src = track.getTrackUrl();

  // This stuff is because of Safari.. psh!
  audio.volume = 0;
  audio.play();

下次启动PowerShell(或CMD)时,新设置将生效。