如何修复“sh:1:path/to/file not found”python random gen

2024-07-05 14:54:38 发布

您现在位置:Python中文网/ 问答频道 /正文

嘿,大家都对我的代码有点意见。每当我女朋友告诉我她不知道在哪里吃饭时,我就给她做一个随机挑选食物的人

我在raspberry pi zero w和云文本到语音API上使用所有的语音工具包,所以命令过程是这样的

---用户按下按钮

“云言在听”

用户说“我们应该去哪里吃饭”

运行rndfoodpkr()--

我还尝试使用omxplayer而不是mixer

def rndfoodpkr():
    randomfile= random.choice(os.listdir(/home/pi/share/Programs/FoodPicker/Food/"))
    file = '/home/pi/share/Programs/FoodPicker/Food' + randomfile + '/'
    os.system ('mixer' + file)

rndfoodpkr()应该运行并选择Food文件夹中的一个随机文件,然后mixer/omxplayer应该运行并播放.mp3文件,但是它会出现此错误

“sh:1:mixer/home/pi/share/Programs/FoodPicker/Food/温迪.mp3/:未找到“

任何文件的结果都是一样的,比如塔考贝尔,麦当劳,阿比斯等等


Tags: 文件用户sharehomefoodospi语音
3条回答

我自己找到了一个很好的解决方案


def rndfoodpkr ():
    path = "/home/pi/share/Programs/FoodPicker/Food"
    randomfile = os.path.join(path, random.choice(os.listdir(path)))
    mixer.init()
    mixer.music.load(randomfile)
    mixer.music.play()

谢谢你们的帮助!你知道吗

我发现这个代码有三个问题:

  1. 第二行的/home前面缺少引号。我怀疑您在发布问题时引入了此错误,因为如果出现此错误,您的程序将根本无法运行。

  2. 当您生成file时,您在错误的位置插入了斜杠——您最终生成的路径如下所示

    /home/pi/share/Programs/FoodPicker/FoodFilename.mp3/
                                          ^^           ^
    

    而不是预期的

    /home/pi/share/Programs/FoodPicker/Food/Filename.mp3
                                           ^           ^
    

    解决这个问题的一个好方法是将路径赋给一个变量,而不是将它包含在程序中两次,然后使用^{}组合路径组件,例如:

    path = "/home/pi/share/Programs/FoodPicker/Food"
    randomfile = os.path.join(path, random.choice(os.listdir(path)))
    
  3. 命令mixer和文件名之间没有空格。添加一个:

    os.system("mixer " + randomfile)
                   ^^^
    

为什么用/字符作为文件名的后缀?这意味着可能告诉您要将其传递到的任何应用程序它是一个目录(例如,它可以播放该目录中的每个文件-不一定是这样,但这肯定不是完全奇怪的行为)。你知道吗

例如,见以下文字记录:

>> touch wendy.mp3
>> aplay wendy.mp3/ # Note the / at the end.
wendy.mp3/: Not a directory

在任何情况下,我怀疑问题可能是路径和文件名之间缺少空间,命令和参数之间缺少空格。这可能会让你完全掌握:

mixer/home/pi/share/Programs/FoodPicker/FoodWendys.mp4

所以我首先想把/移到它所属的地方,把空间放进去,比如:

cmd = 'mixer /home/pi/share/Programs/FoodPicker/Food/{}'.format(randomfile)
cmd = 'mixer {}'.format(os.path.join('/home/pi/share/Programs/FoodPicker', randomfile))

后者(带有os.path.join)被认为更便于携带。你知道吗

如果您的代码在做了这些更改(或者您想调试)之后仍然无法工作,只需在使用之前打印出命令:

print("Command is '{}'".format(cmd))

许多问题只要看看计算机所看到的就可以解决。你知道吗


(1)这也适用于妻子,显然:-)

相关问题 更多 >