如何从python文件运行powerShell脚本

时间:2019-06-25 20:16:23

标签: python powershell subprocess

不幸的是,我找不到太多的信息,但是我希望从我编写的python文件中运行powerShell脚本。我希望用户实际看到powerShell脚本正在运行,并且用户可以从python输入powerShell脚本所需的输入。我正在使用pyCharm作为IDE。

当我运行脚本来调用此powerShell脚本时,它给了我这个错误:

File "C:\TestAutomation\eFuse\eFuse.ps1", line 19
SyntaxError: Non-ASCII character '\xc2' in file C:\Test\eK\eK.ps1 on line 19, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details

这是代码的相关部分:

        elif switch_result == "eTool":
            subprocess.call(['python', 'C:\\TestAutomation\\eFuse\\eFuse.ps1'], stdout=sys.stdout)

此elif语句是其他使用subproccess模块​​运行其他python文件的if / elif语句的一部分,但是由于某种原因,我无法运行此powerShell文件。任何建议表示赞赏。谢谢

2 个答案:

答案 0 :(得分:0)

首先,您应该已经知道.py文件的解释器是python.exe

因此,很容易理解.ps1文件的解释器是powershell.exe,而不是python.exe

我只是复制并粘贴您的代码,您的代码应如下所示

subprocess.call('powershell.exe -File "C:\\TestAutomation\\eFuse\\eFuse.ps1"', stdout=sys.stdout)

关于powershell.exe -?

的详细信息

答案 1 :(得分:0)

您可以执行以下操作,以从python提供用户到PS(powershell)脚本的输入:

1)创建参数化的powershell脚本

2)在python中输入并将其设置为PS脚本参数。

3)使用给定的参数运行/执行脚本。

以下是使用param从python运行powershell脚本的示例。它是python代码:

*希望您有带参数的PS脚本。

handlePersonId = (event, index) =>{

    this.setState(({ personData }) => {

        /* Extract id from event */
        const id = event.target.value;

        /* Clone person array */
        const cloneArray = [].concat(personData);

        /* Iterate index range from 0 to check for invalid person 
        entries and add an empty object if required */
        for(let i = 0; i < index; i++) {
            cloneArray[i] = cloneArray[i] || {};
        }

        if(cloneArray[index]) {
            /* Update id of person at index if person data already 
            exists */
            cloneArray[index].id = id;
        }
        else {
            /* Otherwise create a new person object at index */
            cloneArray[index] = {
                id, 
                name:'', 
                age:'', 
                location:''
            } 
        }

        /* Return new state */
        return { personData : cloneArray };    
    });
}

您可以看到python的输出(如果存在)(如果powershell脚本中没有错误。您将不会从最后一行获得任何输出)