python - 操作系统错误 : [Errno 8] Exec format error when running subprocess. 打开

标签 python shell subprocess popen bin

我正在尝试运行一些从 github 下载的开源代码: https://github.com/augustoqm/MCLRE

代码正在我的 mac shell 中运行。当它到达 subprocess.Popen() 函数时,它会引发“OSError: [Errno 8] Exec format error”。

代码:

启动新流程

mrbpr_cmd_args = '%s -m %s -d %s -u %s -n %s -o %s -k %d -s %d -h %d -l %f -f %d -i %d -a %s -e "%s"-r "%s"-M %s'\ %(mrbpr_bin_path,元文件,train_files,test_users_file,test_candidates_file,output_dir,rank_size,\ save_model、算法、learn_rate、num_fact、num_iter、relation_weights、regularization_per_entity、\ 正则化每个实体,模型名称)

proc = subprocess.Popen(shlex.split(mrbpr_cmd_args), shell=True)

当我打印“mrbpr_cmd_args”变量时,结果是:

/Users/nastia/Desktop/MCLRE-master/src/recommender_execution/mrbpr/mrbpr.bin -m/Users/nastia/Desktop/MCLRE-master/data/experiments/recsys-15/bpr-net_meetup.meta - d/Users/nastia/Desktop/MCLRE-master/data/partitioned_data/san_jose/partition_12/mrbpr/user-event-rsvp_train.tsv,/Users/nastia/Desktop/MCLRE-master/data/partitioned_data/san_jose/partition_12/mrbpr/user-user-same-group_train.tsv,/Users/nastia/Desktop/MCLRE-master/data/partitioned_data/san_jose/partition_12/mrbpr/user-user-same-event_train.tsv -u/Users/nastia/Desktop/MCLRE-master/data/partitioned_data/san_jose/partition_12/mrbpr/users_test.tsv -n/Users/nastia/Desktop/MCLRE-master/data/partitioned_data/san_jose/partition_12/mrbpr/event-candidates_test.tsv -o/Users/nastia/Desktop/MCLRE-master/data/experiments/recsys-15/san_jose/recommendations/partition_12/mrbpr -k 100 -s 0 -h 0 -l 0.100000 -f 200 -i 600 -a 0.25,0.15,0.6 -e ""-r ""-M BPR-NET_200-0.1-600-0.25:0.15:0.6

谁能告诉我这个参数有什么问题吗?

最佳答案

来自您链接的 GitHub 存储库上的自述文件:

Requirements

  • Linux: all experiments were executed in Linux-based machines, Ubuntu distributions, more specifically

而且,如果你看 that path inside the repo , mrbpr.bin 是 Linux 可执行二进制文件。您无法在 Mac 上运行它。

如果他们提供了您自己构建该可执行文件的源代码,或者指向在哪里可以找到它的链接,您可能可以构建一个 Mac 版本。但是,如果做不到这一点,您将无法修复它。

<小时/>

最好的选择可能是运行 Linux 容器、虚拟机或用户模式安装(在 Mac 上或某些免费云主机上),安装 Python 和所有其他要求,然后运行代码就是这样。

<小时/>

如果您想知道为什么会出现该特定错误:

OSError: [Errno 8] Exec format error

有多种不同的可执行文件格式:a.out、ELF、mach-O、COFF 等。大多数 Linux 可执行文件都是 ELF 格式。 macOS 的加载程序只识别 mach-O 和 a.out。因此,您的操作系统甚至无法弄清楚该文件是什么,只是它不知道如何处理该文件。但是,即使你克服了这一点,linux 和 Darwin 系统调用是不同的,glibc 和 BSD libc 是不同的,等等,所以无论如何它都会很快出现段错误。

关于python - 操作系统错误 : [Errno 8] Exec format error when running subprocess. 打开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51469341/

相关文章:

python - Django:我可以从字典中创建一个 QueryDict 吗?

iOS:向 IP 地址发出 shell 命令

linux - bash 和 s3cmd 无法正常工作

.net - 当通过 C# 的 Process 类产生时,处理标准错误和程序输出的正确方法?

linux - 如果之后使用管道,为什么 wait 会生成 “<pid> is not a child of this shell” 错误?

php - 我在 PHP 中使用 Django 用户身份验证。这种基于 cookie 的身份验证方案是否安全?

python - 包含第一个元素的反向数组切片

Linux Bash 脚本和 Mongo

python - 在 Python 3 中调用 gnome 终端子进程时出现 "Failed to execute child process (No such file or directory)"

python - 如何在 PySpark 1.6 中将 DataFrame 列从字符串转换为 float / double ?