반응형

출처

https://stackoverflow.com/questions/32029647/warning-feof-expects-parameter-1-to-be-resource-boolean-given-in-volume1-we

경고 : feof()는 첫 번째 매개 변수가 리소스가 될 것으로 예상합니다. 하지만은 /volume1/web/comment.php 62행에 boolean 타입입니다.

저는 youtube와 다른 사이트의 도움으로 코드를 학습하기 시작했습니다만, 문제에 직면하였습니다. 여기에 제 코드입니다.

<form action="" method="post" id="c">
  <label> Name: <br><input type="text" name="name" size="36"></label><br></br>
  <label> Message: <br><textarea cols="35" rows="5" name="mes"></textarea></label><br></br>
  <input type="submit" name="submit" value="Submit" class="texty" >
</form>

<?php
$post = $_POST["post"];
$name = $_POST["name"];
$text = $_POST["mes"];

if ($post) {

    #WRITE DOWN COMMENTS#

    $write = fopen("c.txt", "a+");
    fwrite($write, "<u><b> $name</b></u><br>$text<br></br>");
    fclose($write);

    #DISPLAY COMMENTS#

    $read = fopen("c.txt", "r+t");
    echo "All comments:<br>";

    while (!feof($read)) {   #this line does the error#
        echo fread($read, 1024);
    }
    fclose($read);
}
else{
    #DISPLAY COMMENTS#

    $read = fopen("c.txt", "r+t");
    echo "All comments:<br>";

    while (!feof($read)) {
        echo fread($read, 1024);
    }
    fclose($read);
}
?>

그래서 2개의 파일이 있는데, 하나는 당신이 코멘트를 입력하고 그것을 게시하는 곳이고, 다른 하나는 당신이 입력한 것을 붙여 넣은 다음 페이지에 다시 출력되는 .txt 파일입니다. 파일 권한에 문제가 있는 것 같습니다. "r"에만 입력하면 오류가 발생하지 않지만 게시하려는 내용이 저장되지 않기 때문입니다. 감사합니다. 읽고 답장해 주셔서 감사합니다.


2 개의 답변 중 1 개의 답변만 추려냄.

fopen은 파일을 열 수 없는 경우 부울(FALSE) 타입을 반환합니다. feof에 전달하기 전에 $read가 false가 아닌지 확인해야 합니다. 그리고 왜 파일을 읽을 수 없는지 알아 내십시오.

if ($read) {
    ...

권한으로 인해 또는 파일 자체를 찾을 수 없는 경우 파일을 읽을 수 없습니다. c.txt를 참조하고 있지만 PHP가 있는 동일한 디렉토리에 있습니까? getcwd를 사용하여 PHP가 어떤 디렉토리에 있는지 확인할 수 있습니다.

echo getcwd ()

또한 form 핸들러는 $_POST[ 'post']에 값이 있지만 해당 이름이 form에서 사용되지 않는 경우에만 쓰기 분기문에 들어갑니다 (적어도 표시된 예제에서는 사용되지 않았습니다).

반응형
반응형

출처 : https://stackoverflow.com/questions/14392432/checking-a-file-existence-on-a-remote-ssh-server-using-python

Python을 사용하여 원격 SSH 서버에서 파일 존재 확인

A와 B 2개의 서버가 있습니다. A 서버에서 이미지 파일을 B 서버로 보낸다고 가정합니다. 하지만 A 서버에서 파일을 보내기 전에 B 서버에 비슷한 파일이 있는지 확인하고 싶습니다. 저는 os.path.exists()를 사용하였지만 작동하지 않았습니다.

print os.path.exists('ubuntu@serverB.com:b.jpeg')

결과는 B 서버에 존재하는 파일이 있어도 false를 리턴합니다. 저는 구문 오류인지 확실하지 않으며 이 문제를 해결하기 위한 더 좋은 방법이 있을까요? 감사합니다.


1개의 답변

os.path 함수는 같은 컴퓨터의 파일에서만 작동합니다. 이는 경로(paths)에서만 작동하며, ubuntu@serverB.com:b.jpeg은 경로가 아닙니다.

이를 이루기 위해서, 원격으로 스크립트를 실행해야 합니다. 다음처럼 하면 작동할 것입니다.

def exists_remote(host, path):
    """SSH로 접근가능한 호스트의 경로에 파일이 있는지 검사합니다."""
    status = subprocess.call(
        ['ssh', host, 'test -f {}'.format(pipes.quote(path))])
    if status == 0:
        return True
    if status == 1:
        return False
    raise Exception('SSH failed')

다른 서버에 파일이 있는지 알려면

if exists_remote('ubuntu@serverB.com', 'b.jpeg'):
    # 원격 파일이 있으면...

이 방법은 100ms 이상 걸릴수도 있고 매우 느릴 수 있습니다.

반응형
반응형

출처 : https://stackoverflow.com/questions/6318809/how-do-i-grab-an-ini-value-within-a-shell-script

shell 스크립트에서 INI 파일 설정값을 얻는 방법은?

다음과 같은 parameters.ini 파일이 있습니다.

[parameters.ini]
    database_user    = user
    database_version = 20110611142248

bash 쉘 스크립트 내에서 parameters.ini 파일에 지정된 데이터베이스 버전을 읽고 사용하여 처리하려고 합니다.

#!/bin/sh
# 스크립트에서 사용하기 위해 parameters.ini 파일에서 데이터베이스 버전을 가져와야 함
PHP app/console doctrine:migrations:migrate $DATEBASE_VERSION

이를 어떻게 할 수 있을까요?


31개의 답변 중 1개

해당 라인의 값을 grep 하고난 뒤 awk를 사용하는 것은 어떨까요?

version=$(awk -F "=" '/database_version/ {print $2}' parameters.ini)
반응형
반응형

출처 : https://towardsdatascience.com/3-ways-to-load-csv-files-into-colab-7c14fcbdcb92

시작하기: Colab에서 CSV 파일을 불러오는 3가지 방법

데이터 사이언스는 데이터 없이는 아무것도 아닙니다. 예 그것은 분명합니다. 분명하지 않은 것은 데이터를 탐색할 수 있는 형식으로 데이터를 가져오기 위한 단계입니다. (쉼표로 구분된 값을 줄여서) CSV 형식의 데이터 셋을 가질 수 있지만 다음에 수행할 작업은 알 수 없습니다. 이 글은 Colab에서 CSV 파일을 불러옴으로써 데이터 사이언스를 시작하는 데 도움이 될 것입니다.

Colab(Colaboratory를 줄여서)은 Python으로 코딩하도록 구글로부터 온 무료 플랫폼입니다. Colab은 본질적으로 Jupyter Notebook의 구글 Suite 버전입니다. Jupyter 위의 Colab의 몇가지 이점은 문서로 공유하기와 더 쉬운 패키지 설치가 있습니다. 아직, CSV 파일 처럼 파일을 불러올 때 몇가지 추가 코딩이 필요합니다. 저는 Colab에서 CSV 파일을 불러오기 위한 3가지 방법을 보여드리고 이를 Pandas 데이터프레임으로 추가할 것입니다.

(참고 : 공통 데이터 세트를 전달하는 Python 패키지가 있습니다. 이 기사에서 이러한 데이터 세트를 불러오는 것에 대해서는 논의하지 않을 것 입니다.)

시작하기 위해 당신의 구글 계정으로 로그인하여 Google Drive로 갑니다. 왼쪽에 새로 만들기 버튼을 클릭하고 만약 설치되었다면 Colaboratory 를 선택합니다. (더 많은 앱 연결을 클릭하지 않으면 Colaboratory을 검색하여 설치하십시오.) 여기에서 아래와 같이 Pandas를 import 합니다. (Colab에 이미 설치되어 있음).

import pandas as pd

1) Github로 부터(파일 < 25MB)

CSV 파일을 업로드하는 가장 쉬운 방법은 GitHub 저장소를 사용하는 것입니다. 당신의 저장소에서 데이터 세트를 클릭하고 View Raw를 클릭합니다. raw 데이터 세트에 대한 링크를 복사하여 아래 표시된대로 Colab에 url이라는 문자열 변수로 저장합니다 (보다 깔끔한 방법이지만 필요하지는 않습니다). 마지막 단계는 URL을 Pandas read_csv로 불러와 데이터 프레임을 얻는 것입니다.

url = '복사한_raw_GitHub_링크'
df1 = pd.read_csv(url)
# 데이터 세트는 Pandas Dataframe에 이제 저장됩니다.

2) local drive로 부터

당신의 local drive로부터 업로드하여, 다음 코드로 시작합니다.

from google.colab import files
uploaded = files.upload()

선택할 파일이 프롬프트로 나올 것입니다. "파일 선택하기"를 클릭하여 파일을 선택하여 업로드 합니다. 파일이 100% 업로드 되기를 기다립니다. Colab이 파일을 업로드를 했을 때 파일의 이름이 보여야 합니다.

마지막으로, 데이터 프레임으로 그것을 import하기 위해 다음 코드를 타이핑합니다. (파일 이름은 업로드한 파일의 이름과 똑같은지 확인해야 합니다).

import io
df2 = pd.read_csv(io.BytesIO(uploaded['Filename.csv']))
# 데이터 세트는 Pandas Dataframe에 이제 저장됩니다.

3) PyDrive를 통한 Google Drive로 부터

이는 3가지 방법 중에 가장 복잡합니다. 워크 플로 제어를 위해 CSV 파일을 Google 드라이브에 업로드 하는 것을 보여 드리겠습니다. 먼저 다음 코드를 입력하십시오.

# Colaboratory에서 csv 파일을 읽기 위한 코드:
!pip install -U -q PyDrive
from pydrive.auth import GoogleAuth
from pydrive.drive import GoogleDrive
from google.colab import auth
from oauth2client.client import GoogleCredentials
# PyDrive 클라이언트를 생성하고 인증하기
auth.authenticate_user()
gauth = GoogleAuth()
gauth.credentials = GoogleCredentials.get_application_default()
drive = GoogleDrive(gauth)

프롬프트가 표시되면 링크를 클릭하여 Google이 드라이브에 액세스 할 수 있도록 인증을 받습니다. 상단에 'Google Cloud SDK가 Google 계정에 액세스 하려고 합니다'라는 화면이 표시됩니다. 권한을 허용한 후 제공된 확인 코드를 복사하여 Colab의 상자에 붙여 넣습니다.

확인이 완료되면 Google 드라이브의 CSV 파일로 이동하여 마우스 오른쪽 버튼으로 클릭하고 "공유 가능 링크 가져 오기"를 선택하십시오. 링크가 클립 보드에 복사됩니다. 이 링크를 Colab의 문자열 변수에 붙여 넣습니다.

link = 'https://drive.google.com/open?id=1DPZZQ43w8brRhbEMolgLqOWKbZbE-IQu' # 공유 가능 링크

원하는 것은 등호 뒤의 ID 부분입니다. 해당 부분을 얻으려면 다음 코드를 입력하십시오.

fluff, id = link.split('=')
print (id) # '=' 뒤에 모든 부분이 있는지 확인

마지막으로, 데이터프레임으로 파일을 얻기 위해 다음 코드를 타이핑 합니다.

downloaded = drive.CreateFile({'id':id}) 
downloaded.GetContentFile('Filename.csv')  
df3 = pd.read_csv('Filename.csv')
# 데이터 세트는 Pandas Dataframe에 이제 저장됩니다.

마지막 의견

Colab에서 CSV 파일을 업로드하기 위한 3가지 접근이 있습니다. 각각 파일 크기와 워크 플로 구성 방법에 따라 장점이 있습니다. 데이터가 Pandas 데이터프레임처럼 더 좋은 포멧이라면, 작업할 준비가 된 것입니다.

보너스 방법 - 내 드라이브

당신의 지원에 매우 감사합니다. 이 글은 50,000 View와 25K의 읽기에 도달하는 영광이 있었고, 저는 Colab에서 CSV 파일을 얻기 위한 추가적인 방벙을 제공합니다. 이는 더 간단하고 분명합니다. Google Drive("My Drive")에서, 당신이 선택한 위치에서 data라 불리는 폴더를 만듭니다. 이는 당신의 데이터를 업로드할 곳이 될 것입니다.

Colab 노트북에서, 다음을 타이핑합니다.

from google.colab import drive
drive.mount('/content/drive')

세 번째 방법과 마찬가지로 명령을 사용하면 Google 인증 단계로 이동합니다. Google 드라이브 파일 스트림에서 Google 계정에 액세스하시오 라는 화면이 표시됩니다. 권한을 허용한 후 제공된 확인 코드를 복사하여 Colab의 상자에 붙여 넣습니다.

노트북에서 노트북 왼쪽 상단에 >를 클릭하고 파일을 클릭하십시오. 앞에서 만든 data 폴더를 찾고 데이터를 찾으십시오. 데이터를 마우스 오른쪽 버튼으로 클릭하고 경로 복사를 선택하십시오. 이 복사된 경로를 변수에 저장하면 바로 사용할 수 있습니다.

path = "copied path"
df_bonus = pd.read_csv(path)
# 데이터 세트는 Pandas Dataframe에 이제 저장됩니다.

이 방법의 장점은 세 번째 방법과 관련된 추가 단계없이 자체 Google 드라이브에서 생성한 별도의 데이터 세트 폴더에서 데이터 세트에 액세스 할 수 있다는 것입니다.

반응형
반응형

출처

https://stackoverflow.com/questions/10856447/sed-command-find-and-replace-in-even-lines-of-a-file


sed에서 파일의 짝수 줄만 찾아 치환하는 명령

저는 이 stackoverflow에서 신입입니다. 저는 SED를 사용하여 파일의 짝수 줄만 표현식으로 치환하고 싶습니다. 제 문제는 원래 파일의 변화는 원래 파일에서 변한 내용을 저장하는 방법을 생각할 수 없다는 점입니다. (예: 파일에서 변한 내용을 덮어쓰는 방법) 저는 다음을 시도해 보았습니다.

sed -n 'n;p;' filename | sed 's/aaa/bbb/'

하지만 이는 변한 내용을 저장할 수 없습니다. 이에 대한 당신의 도움에 감사드립니다.

------

4개의 답변 중 1 개의 답변만 추려냄.

다음을 시도하세요.

sed -i '2~2 s/aaa/bbb/' filename

-i 옵션은 sed에게 해당 filename에서 작동하도록 표준출력(stdout)으로 수정된 버전을 쓰지 않고 즉 원래 파일을 나두지 않고 파일의 변경 내용을 적용하도록 합니다. 2~2부분은 명령어를 통해 적용되어야 할 sed의 줄(라인)에 대한 주소입니다. 2~2는 짝수 줄만 편집(수정)함을 의미합니다. 1~2는 홀수 줄만 편집(수정)함을 의미합니다. 5~6는 6줄마다 편집(수정)하고 5번째 줄부터 시작합니다.

-- 역자 추가 내용--

참고주소

https://www.gnu.org/software/sed/manual/html_node/Addresses.html


반응형
반응형

출처 : https://stackoverflow.com/questions/12845206/check-if-file-exists-on-remote-host-with-ssh

ssh로 원격 호스트의 파일이 존재하는 지 확인

저는 원격 호스트에서 특정 파일이 있는지 확인하고 싶습니다. 그래서 다음을 시도했습니다.

$ if [ ssh reg@localhost -p 19999 -e /home/reg/Dropbox/New_semiosNET/Research_and_Development/Puffer_and_Traps/Repeaters_Network/UBC_LOGS/log1349544129.tar.bz2 ] then echo "okidoke"; else "not okay!" fi
-sh: syntax error: unexpected "else" (expecting "then") 

13개의 답변 중 1 개의 답변

여러 답변에 근거하여 다음처럼 짧게 사용하는 방법이 있습니다.

ssh -q $HOST [[ -f $FILE_PATH ]] && echo "File exists" || echo "File does not exist";

-q는 quiet 모드입니다. 이는 warning과 메세지를 덜 나오게 할 것입니다.

@Mat님이 언급했듯이 이처럼 테스트하는 것의 이득은 -f-nt, -d, -s... 등과 같은 다른 테스트 연산자로 쉽게 바꿀 수 있기 때문에 좋습니다.

테스트 연산자: http://tldp.org/LDP/abs/html/fto.html

반응형
반응형

출처 : http://unix.stackexchange.com/questions/16640/how-can-i-get-the-size-of-a-file-in-a-bash-script

bash script 에서 파일의 크기를 어떻게 구할 수 있을까요?

bash script 에서 파일의 크기를 어떻게 구할 수 있을까요?

이를 bash 변수에 할당하여 나중에 사용하려면 어떻게 해야 할까요?


13개의 답변 중 1개의 답변만 추려냄.

GNU 시스템에 대한 최선의 선택:

stat --printf="%s" file.any

man stat 에서는

%s 바이트로 전체 크기

bash script에서는

#!/bin/bash
FILENAME=/home/heiko/dummy/packages.txt
FILESIZE=$(stat -c%s "$FILENAME")
echo "Size of $FILENAME = $FILESIZE bytes."

Mac OS X에서 터미널의 stat 사용하는 방법은 @chbrown의 답변을 보세요.

반응형

+ Recent posts