在python中执行PowerShell行
我正在研究一种摄像机设置,它可以在一些伺服电机上旋转摄像机时跟踪人脸。我想这样做的方式(我可能这样做的方式):我使用python openCV获得人脸位置并生成一个向量,它告诉我们要转向哪个方向,这样相机才能直视人脸。然后,该矢量被发送到Arduino Uno,在那里,输入矢量使用Arduino IDE解码为伺服电机运动。问题是将用python脚本计算的向量发送到Arduino。我使用PowerShell命令通过Windows终端将所述向量发送到COM10:在python中执行PowerShell行,python,windows,powershell,arduino,Python,Windows,Powershell,Arduino,我正在研究一种摄像机设置,它可以在一些伺服电机上旋转摄像机时跟踪人脸。我想这样做的方式(我可能这样做的方式):我使用python openCV获得人脸位置并生成一个向量,它告诉我们要转向哪个方向,这样相机才能直视人脸。然后,该矢量被发送到Arduino Uno,在那里,输入矢量使用Arduino IDE解码为伺服电机运动。问题是将用python脚本计算的向量发送到Arduino。我使用PowerShell命令通过Windows终端将所述向量发送到COM10: $port= new-Object
$port= new-Object System.IO.Ports.SerialPort COM10, 9600, None, 8, one
$port.open()
$port.Writeline(vector)
$port.close()
当我使用python os或子流程命令时,如下所示:
os.system("powershell $port= new-Object System.IO.Ports.SerialPort COM10, 9600, None, 8, one")
os.system("powershell $port.open()")
或
第一行运行良好,但是我假设的端口变量未保存,第二行出现以下错误:
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行代码并执行它,但我甚至无法让该脚本在我的终端上运行,等等。
这种方法会有效吗?我可以修复它,还是干脆放弃它,使用其他方法?
如果可能的话,我会做错什么呢?这里的问题似乎是您正在将命令作为子进程运行。运行第一个命令
os.system(“powershell$port=new Object system.IO.Ports.SerialPort COM10,9600,None,8,one”)
后,您就在新进程中定义了$port
变量,然后该进程退出,不再存在
当您运行os.system(“powershell$port.open()”
时,您正在创建一个新进程,它不知道$port
变量曾经存在过
您需要将整个脚本存储在一个单独的文件中,然后立即运行整个脚本。如果您有任何问题,这也将使脚本更容易在以后进行编辑和调试
有关运行脚本的帮助,请参阅
$port.Writeline(vector)