質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

3回答

10035閲覧

macとwindowsで開発するときの環境をどう合わせるのか OSError: [Errno 8] Exec format error

gajae443

総合スコア14

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2017/02/21 06:47

編集2017/02/22 01:43

###前提・実現したいこと
友達とアプリ開発をしているのですが、使っているパソコンがmacとwindowsで異なっており、片方で作ったコードをもう片方のパソコンで実行しようとするとエラーが出てしまいます。エラーメッセージは以下の通りです。
解決策として、
・バグを解消するコーディングをする
・開発環境を揃える、windowsの方をLinuxで動かす
などを考えました。
どなたかご教授いただけると幸いです。
###発生している問題・エラーメッセージ

OSError: [Errno 8] Exec format error

OSError: [Errno 8] Exec format error: '/Users/Hiromu/Desktop/20170128_アルゴリズム構築用データ集め/cgi-bin/recommend.py'
127.0.0.1 - - [21/Feb/2017 15:45:15] CGI script exit status 0x7f00

###該当のソースコード

ここにご自身が実行したソースコードを書いてください

-- coding: utf-8 --

"""
推薦アルゴリズム構築部

Reference: http://coreblog.org/ats/stuff/minpy_web/
"""

文字化け回避

import sys
import io
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')

html_body = """

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>たびレコ-推薦アルゴリズムプロトタイプ</title> <link rel="stylesheet" href="../css/main.css" type="text/css"> </head> <body> <div id= "header"> <h1>たびレコ</h1> </div> <div id ="pagetitle"> <h2>気に入ったら〇を、それ以外は×を押してください!</h2> </div>
<div id="contents"> <form action="/cgi-bin/recommend.py" method="POST" style="display: inline"> <input type="image" src="../img/dislike.png" width=150 name="text2" value="1{0}" /> </form> <img src="../photos/({0}).JPG" width =500> <form action="/cgi-bin/recommend.py" method="POST" style="display: inline"> <input type="image" src="../img/like.png" width=150 name="text" value="5{0}" /> </form> </div> <div id="tabs"> <a href = "../index.html"><button>リセット</button></a> </div> <div id="footer"> <p>連絡先:中沢 singnk11@gmail.com</p> </div> <p>Debug Message</p> <p>{0}</p> <p>{1}</p> <p>{2}</p>
</body> </html>

"""
#!/usr/bin/env python
#-- coding: utf-8 --

import cgi
import csv
import pandas as pd
import pickle
import numpy as np
import os

以前のデータを読み込む

df = pd.read_csv("recommend.csv")

form = cgi.FieldStorage()
userID = form.getvalue("id","processing") #UserIDを取得

始まりの画像

if userID != "processing":
num = "1"

画像のどちらを選んだか。Oなら1,Xなら2

select = form.getvalue("text","00")
if select[0] != "5":
select = form.getvalue("text2","00")
# select = "1" + num
num = select[1:]
select= select[0]

最初は、一番左のカラムにuserID登録

if userID != "processing":
zeros = np.zeros(df.shape[1])
zeros = pd.Series(zeros, index=df.columns, name = df.shape[0])
df = df.append(zeros)
df["userID"][df.shape[0]-1] = userID

画像を選択した状態

else:
df.iloc[[df.shape[0]-1],[int(num)+1]] = select[0]
# 次に移す画像の番号
num = str(int(num) + 1)

dfを保存

df.to_csv("recommend.csv", index= False)

画像の枚数を数える

path = "photos"
l = os.listdir(path)
no_f = 0
for i in l:
item = i.split(".")
if item[1] == "jpg":
no_f +=1
elif item[1] == "JPG":
no_f +=1
if int(num) > no_f - 2:
num = "33"

print("Content-Type: text/html\n")
print(html_body.format(num, userID, select))

###試したこと
課題に対してアプローチしたことを記載してください

###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

これって、どういう風に実行させようとしていますか?エラーメッセージを見るとCGIとして実行させようとしているように見えますが。
仮に、そうだとすると、Webサーバーの方でPythonスクリプトファイルをPythonにハンドリングするように設定していますか?

それと、Pythonスクリプトファイルの文字コードはどうなっていますか?UTF-8でしょうか?UTF-8であれば、BOM無しで保存していますか?(Windowsは特に注意!)
文字コードがUTF-8でBOM付きで保存したファイルだと、動かせないことがあります。
(UNIX/Linux環境、オープンソース系プログラムでの使用では特に)

投稿2017/02/25 01:34

archiver

総合スコア1557

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

一番ありそうなのは、Mac と Windows とでのテキストファイルの改行の違い(Mac は LF、Windows は CR+LF)でしょうかね。
Windows 標準のメモ帳などを使わない限り、CR+LF でないと困る場面は存在しませんから、LF に統一しておくべきです。

あとは、このエラーは Mac でのエラーだと思いますが、.py で示されるファイルを何が実行することになっているか、きちんと設定されていますか? exec format error ということは、実行するプログラムがそもそも Python (のインタプリタ)ではない(どころか実行アプリケーションが設定されていないので、Python のソースコードをそのままプログラムファイルだと思って実行している)のではないかと。
Mac 側で Python をきちんとインストールしてあるのでしょうか?

投稿2017/02/22 01:49

tacsheaven

総合スコア13703

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

gajae443

2017/02/24 14:24

pythonの入れ直しと改行のプログラムの訂正をしましたが、同じようにエラーが出てしまいました。 以下pythonのバージョンと、修正版のプログラムです。 mu-no-MacBook-Pro:20170224_アルゴリズム構築用データ集め Hiromu$ python --version Python 3.5.2 :: Anaconda 4.2.0 (x86_64) # -*- coding: utf-8 -*- """ 推薦アルゴリズム構築部 Date: Jan 28th, 2017 Modified: Feb 24th, 2017 Author: Shingo Nakazawa Reference: http://coreblog.org/ats/stuff/minpy_web/ """ # 文字化け回避 import sys import io sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8') html_body = """ <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>たびレコ-推薦アルゴリズムプロトタイプ</title> <link rel="stylesheet" href="../css/main.css" type="text/css"> </head> <body> <div id= "header"> <h1>たびレコ</h1> </div> <div id ="pagetitle"> <h2>気に入ったら〇を、それ以外は×を押してください!</h2> </div> <div id="contents"> <form action="/cgi-bin/recommend.py" method="POST" style="display: inline">   <input type="image" src="../img/dislike.png" width=150 name="text2" value="1{0}" /> </form> <img src="../photos/({0}).JPG" width =500> <form action="/cgi-bin/recommend.py" method="POST" style="display: inline">   <input type="image" src="../img/like.png" width=150 name="text" value="5{0}" /> </form> </div> <div id="tabs"> <a href = "../index.html"><button>リセット</button></a> </div> <div id="footer"> <p>連絡先:中沢 singnk11@gmail.com</p> </div> <p>Debug Message</p> <p>{0}</p> <p>{1}</p> <p>{2}</p> </body> </html> """ import cgi import csv import pandas as pd import pickle import numpy as np import os # 以前のデータを読み込む df = pd.read_csv("recommend.csv") form = cgi.FieldStorage() userID = form.getvalue("id","processing") #UserIDを取得 # 始まりの画像 if userID != "processing": num = "1" # 画像のどちらを選んだか。Oなら1,Xなら2 select = form.getvalue("text","00") if select[0] != "5": select = form.getvalue("text2","00") num = select[1:] select= select[0] # 最初は、一番左のカラムにuserID登録 if userID != "processing": zeros = np.zeros(df.shape[1]) zeros = pd.Series(zeros, index=df.columns, name = df.shape[0]) df = df.append(zeros) df["userID"][df.shape[0]-1] = userID # 画像を選択した状態 else: df.iloc[[df.shape[0]-1],[int(num)+1]] = select[0] # 次に移す画像の番号 num = str(int(num) + 1) # dfを保存 df.to_csv("recommend.csv", index= False) # 画像の枚数を数える path = "photos" l = os.listdir(path) no_f = 0 for i in l: item = i.split(".") if item[1] == "jpg": no_f +=1 elif item[1] == "JPG": no_f +=1 if int(num) > no_f - 2: num = str(no_f-1) print("Content-Type: text/html\n") print(html_body.format(num, userID, select))
guest

0

自己解決

単に、実行権限を取得するのができていないだけでした。。

ターミナルで以下のコマンド
cd cgi-bin
chmod 755 recommend.py
を入力したら、うまく動きました。
おさわがせしました。ご回答いただいた方ありがとうございました。

投稿2017/02/25 01:39

gajae443

総合スコア14

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問