OSError: [Errno 8] Exec format error when running subprocess.Popen

OSError: [Errno 8] Exec format error when running subprocess.Popen

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

代码是 运行ning 来自我的 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, meta_file, 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, \ regularization_per_entity, model_name)

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 存储库上的自述文件,您 linked:

Requirements

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

而且,如果您查看 that path inside the repomrbpr.bin 是一个 Linux 可执行二进制文件。你不能 运行 Mac.

如果他们提供您自己构建该可执行文件的源代码,或者 link 到哪里可以找到它,您可能会构建一个 Mac 版本。但是,如果做不到这一点,您将无能为力。


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


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

OSError: [Errno 8] Exec format error

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