【问题标题】:Executing PowerShell lines in python在 python 中执行 PowerShell 行
【发布时间】:2021-02-25 21:23:33
【问题描述】:

我正在研究一种相机设置,当在某些伺服电机上旋转相机时,它可以跟踪人脸。我想要这样做的方式(我可能这样做的方式)是这样的:我使用 python openCV 来获取面部位置并生成一个向量,该向量告诉你转向哪个方向以便相机看起来直接打脸。然后将该向量发送到 Arduino Uno,在其中使用 Arduino IDE 将输入向量解码为伺服电机运动。问题是将在 python 脚本中计算的向量发送到 Arduino。我使用 PowerShell 命令通过 Windows 终端将所述向量发送到 COM10

$port= new-Object System.IO.Ports.SerialPort COM10, 9600, None, 8, one
$port.open()
$port.Writeline(vector)
$port.close()

当我像这样使用 python os 或 subprocess 命令时:

os.system("powershell $port= new-Object System.IO.Ports.SerialPort COM10, 9600, None, 8, one")
os.system("powershell $port.open()")

或者

subprocess.run(["powershell", "-Command", "$port= new-Object System.IO.Ports.SerialPort COM10, 9600, None, 8, one"])
subprocess.run(["powershell", "-Command", "$port.open()"])

第一行运行良好,但是我假设的 port 变量没有保存,第二行出现以下错误:

You cannot call a method on a null-valued expression.
At line:1 char:1
+ $port.open()
+ ~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull

在整个 python 脚本中,我只需要重复执行一行,因为我从摄像头获得了视频的实时提要:

$port.Writeline(vector)

其他行仅在脚本启动和停止运行时使用。

我尝试了很多其他的东西,比如在 PowerShell 脚本中编写这 4 行并执行它,但我什至无法让该脚本在我的终端上运行,等等。 这种方法是否可行,我可以修复它,还是我应该直接放弃它并使用其他东西? 如果有可能,那我做错了什么?

【问题讨论】:

    标签: python windows powershell arduino


    【解决方案1】:

    您的问题似乎是您将命令作为 子进程 运行。运行第一个命令 os.system("powershell $port= new-Object System.IO.Ports.SerialPort COM10, 9600, None, 8, one") 后,您已经在新进程中定义了 $port 变量,然后该进程退出并且不再存在。

    当您运行os.system("powershell $port.open()") 时,您正在创建一个新进程,它不知道$port 变量曾经存在过。

    您需要考虑将该脚本完整地存储在一个单独的文件中,然后一次运行整个脚本。如果您有任何问题,这也将使该脚本更易于您稍后编辑和调试。

    请参阅 this issue 以获取有关运行脚本的帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-08
      • 2015-07-17
      • 1970-01-01
      • 2022-01-03
      • 1970-01-01
      相关资源
      最近更新 更多