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

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

ただいまの
回答率

90.48%

  • Python

    12223questions

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

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

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 2,228

gajae443

score 4

前提・実現したいこと

友達とアプリ開発をしているのですが、使っているパソコンが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/ツール等のバージョンなど)

より詳細な情報

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • 退会済みユーザー

    2017/02/21 16:31

    複数のユーザーから「問題・課題が含まれていない質問」という意見がありました
    teratailでは、漠然とした興味から票を募るような質問や、意見の主張をすることを目的とした投稿は推奨していません。
    「編集」ボタンから編集を行い、質問の意図や解決したい課題を明確に記述していただくと回答が得られやすくなります。

回答 3

+1

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/02/24 23: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))

    キャンセル

+1

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

check解決した方法

0

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

同じタグがついた質問を見る

  • Python

    12223questions

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