同时运行两个python文件

时间:2018-04-17 10:38:33

标签: python parallel-processing scripting

我尝试过使用

#!/bin/bash
python ScriptA.py &
python ScriptB.py &

同时运行两个脚本,但它总是返回"无效的语法"使用ScriptA,即使所有python文件都在同一个文件夹中。

运行两个脚本的文件:

def song():
user = input()
    if user == "Chance":
        python ScriptA.py &
        python ScriptB.py &
   else:
        print("Error")

到目前为止我找到的解决方案,例如将该脚本放在一行中,并不会因错误仍然显示而起作用。

-------------------------- EDIT -------------------- ------

两个脚本都可以单独运行,但是,您提供的所有解决方案仍然按顺序运行。脚本A是通过OpenCV播放的视频,脚本B是通过播放器播放的歌曲。

SCRIPTA:

import cv2
import numpy as np
import os
os.environ['SDL_VIDEO_CENTERED'] = '1'
cap = cv2.VideoCapture("video.mp4")
while(cap.isOpened()):
  ret, frame = cap.read()
  if ret == True:
    cv2.imshow('Frame',frame)
    if cv2.waitKey(25) & 0xFF == ord('q'):
      break
  else:
    break
cap.release()
cv2.destroyAllWindows()

ScriptB:

from playsound import playsound
a = (r"C:\Users\A\Desktop\sound.mp3")
playsound(a)

正如您所说,我试图在视频旁边显示一首歌。我试图显示一个声音但openCV因某种原因无法输出声音的视频。有什么建议?

4 个答案:

答案 0 :(得分:2)

我认为你正在寻找多线程

您可以将两个脚本合并到另一个脚本中, 那么他们使用theads

<强> - 编辑 -

from threading import Thread

import cv2
import numpy as np
import os
from playsound import playsound

def play_sound(): 
    # import your script A
    a = (r"C:\Users\A\Desktop\sound.mp3")
    playsound(a)

def CV2_stuff():
    # import your script B
    os.environ['SDL_VIDEO_CENTERED'] = '1'
    cap = cv2.VideoCapture("video.mp4")
    ...


Thread(target = play_sound).start() 
Thread(target = CV2_stuff).start()

希望有所帮助

这也可以起作用

import ScriptA
import ScriptB

ScriptA.function()
ScriptB.function()

但他们不会在同一时间被解释

答案 1 :(得分:1)

您必须导入os模块并使用其中的system函数,然后将&&所运行的两个Python文件分开。

import os
def song():
    user = input()
    if user == "Chance":
        os.system('python ScriptA.py && python ScriptB.py')
    else:
        print("Error")

song()

但是我建议你只需将要运行的两个文件导入到第三个文件中,然后像普通函数一样运行那里的函数。

e.g。

import ScriptA
import ScriptB

ScriptA.function()
ScriptB.function()

如果脚本中没有函数,则脚本在导入后立即运行。

答案 2 :(得分:0)

您可以尝试os.system:

import os

os.system("python ScriptA.py &")
os.system("python ScriptB.py &")

答案 3 :(得分:0)

您可以只打开python IDLE上的两个文件,然后分别运行它们。 如果您需要两个文件同时运行(第一种延迟在每个文件上按F5的方式),则可以使用PyCharm并下载 multirun 插件。