Home Php C# Sql C C++ Javascript Python Java Go Android Git Linux Asp.net Django .net Node.js Ios Xcode Cocoa Iphone Mysql Tomcat Mongodb Bash Objective-c Scala Visual-studio Apache Elasticsearch Jar Eclipse Jquery Ruby-on-rails Ruby Rubygems Android-studio Spring Lua Sqlite Emacs Ubuntu Perl Docker Swift Amazon-web-services Svn Html Ajax Xml Java-ee Maven Intellij-idea Rvm Macos Unix Css Ipad Postgresql Css3 Json Windows-server Vue.js Typescript Oracle Hibernate Internet-explorer Github Tensorflow Laravel Symfony Redis Html5 Google-app-engine Nginx Firefox Sqlalchemy Lucene Erlang Flask Vim Solr Webview Facebook Zend-framework Virtualenv Nosql Ide Twitter Safari Flutter Bundle Phonegap Centos Sphinx Actionscript Tornado Register | Login | Edit Tags | New Questions | 繁体 | 简体


10 questions online user: 3

0
votes
answers
72 views
+10

爲什麼我的推送通知不斷重複不規則?

0

使用警報管理器和待處理意圖設置的推送通知顯示異常行爲。出於某種原因,在我打開應用程序後,通知出現一分鐘或更少。有時一分鐘不止一次,那麼它暫時不會出現。我的想法是每天發佈一次通知,假設用戶在24小時內沒有訪問我的應用程序。我打算取消任何以前的計時器,並在用戶下一次訪問我的應用程序時啓動一個新的計時器。以下是我的代碼。爲什麼我的推送通知不斷重複不規則?

public class Main_Menu extends AppCompatActivity { 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main_menu); 

    this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 


    Button goToGame1; 

    goToGame1 = (Button) findViewById(R.id.Game1); 
    goToGame1.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent beAtGame1 = new Intent(Main_Menu.this, memory_modes.class); 
      startActivity(beAtGame1); 
     } 
    }); 


Button goToGame2; 

    goToGame2 = (Button) findViewById(R.id.Game2); 
    goToGame2.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent beAtGame2 = new Intent(Main_Menu.this, computation_modes.class); 
      startActivity(beAtGame2); 
     } 
    }); 


Button goToGame3; 

    goToGame3 = (Button) findViewById(R.id.Game3); 
    goToGame3.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent beAtGame3 = new Intent(Main_Menu.this, evaluation_modes.class); 
      startActivity(beAtGame3); 
     } 
    }); 


    Button goToGame4; 

    goToGame4 = (Button) findViewById(R.id.Game4); 
    goToGame4.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent beAtGame4 = new Intent(Main_Menu.this, attention_modes.class); 
      startActivity(beAtGame4); 
     } 
    }); 


    Button goToTrackers; 

    goToTrackers = (Button) findViewById(R.id.Trackers); 
    goToTrackers.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent beAtTrackers = new Intent(Main_Menu.this,trackerMenu.class); 
      startActivity(beAtTrackers); 
     } 
    }); 



    Intent intent = new Intent(Main_Menu.this, Receiver.class); 
    PendingIntent pendingIntent = PendingIntent.getBroadcast(Main_Menu.this, 1, intent, 0); 
    AlarmManager alarm = (AlarmManager)getSystemService(ALARM_SERVICE); 
    alarm.cancel(pendingIntent); 
    alarm.setRepeating(alarm.RTC_WAKEUP, System.currentTimeMillis(), alarm.INTERVAL_DAY, pendingIntent); 


    } 

public void onBackPressed() { 
    Intent intent = new Intent(Intent.ACTION_MAIN); 
    intent.addCategory(Intent.CATEGORY_HOME); 
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    startActivity(intent); 
} 

} 

public class Receiver extends BroadcastReceiver { 
@Override 
public void onReceive(Context context, Intent intent) { 
    showNotification(context); 
} 

public void showNotification(Context context) { 
    Intent intent = new Intent(context, Main_Menu.class); 
    PendingIntent pi = PendingIntent.getActivity(context, 1, intent, 0); 
    NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context) 
      .setSmallIcon(R.drawable.smalliconfinal) 
      .setColor(Color.argb(000,255,177,17)) 
      .setLargeIcon(BitmapFactory.decodeResource(context.getResources(), R.drawable.icon4)) 
      .setContentTitle("Title") 
      .setContentText("Some text."); 
    mBuilder.setLights(0xffffb111, 750, 750); 
    mBuilder.setContentIntent(pi); 
    mBuilder.setDefaults(Notification.DEFAULT_SOUND); 
    mBuilder.setAutoCancel(true); 
    NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 
    mNotificationManager.notify(1, mBuilder.build()); 
} 

} 

,並從我的清單:

<receiver android:name=".Receiver"></receiver> 

誰知道爲什麼發生此問題?

非常感謝, 謝謝。

沙发
0
1

AlarmManager.setRepeating方法的第二個參數是警報首先熄滅的時間。

您使用這些參數調用此方法:

alarm.setRepeating(alarm.RTC_WAKEUP, System.currentTimeMillis(), alarm.INTERVAL_DAY, pendingIntent); 

這意味着你設置的重複報警,只要你調用方法(當創建Main_Menu活動)熄滅。

從你的描述好像你正在尋找的東西是這樣的:

alarm.setRepeating(AlarmManager.RTC_WAKEUP, (System.currentTimeMillis() + AlarmManager.INTERVAL_DAY), AlarmManager.INTERVAL_DAY, pendingIntent); 
+0

大加讚賞。 – 4u53r

0
votes
answers
26 views
+10

如何在Assembly中爲延遲循環設置正確的時序?

0

我想用匯編語言編寫一秒延遲循環,但我不確定循環的計數是什麼,以便延遲1秒。如何在Assembly中爲延遲循環設置正確的時序?

這是我到目前爲止有:

MOV R1, #count 

DELAY_LOOP: 
      SUBS R1, R1, #1 

      BNE DELAY_LOOP 

我使用的是Beaglebone黑色。提前致謝!

+1

如果有可用的定時器中斷,請嘗試使用它。 – Thilo

+1

檢查時鐘速度以及您使用每條指令需要多少時鐘。然後劃分。或者,如果你懶惰並且不需要很高的精度,那麼在該處粘貼一個大數字,然後用手錶計時,然後將其縮小。 – Jester

+0

特別是在現代CPU中;對於不同的CPU,時鐘速度可以不同,和/或可以在CPU運行時改變(由於電源管理 - 例如,由Beaglebone Black使用的SoC支持的「動態CPU頻率縮放」功能);如果這些事情都不可能,那麼「隨機」進行循環的IRQ仍然需要比應有的更長的時間。由於這些原因,延遲循環幾乎總是一個錯誤,因爲確定正確的計數是不可能的(甚至當它不是一個可移植性和維護性災難的錯誤時)。您應該使用實際的硬件計時器。 – Brendan

沙发
0
0

很難爲ARM獲得這種權利,尤其是在操作系統上運行此操作時。不可能是準確的。純粹的裸機,沒有中斷,你可以通過實驗手動調整它,但是如果你改變了對齊方式,那麼性能可能會發生很大的變化,這不僅是因爲大多數人會假設的緩存,而且還會影響到獲取線的位置和最佳點用於分支預測,如果存在分支預測以及它是如何實現的。我用這個確切的循環來證明這個問題有點微不足道。

這個問題不是ARM特有的任何事情流水線每次抓取事務往往要抓取多個指令,出於性能原因,抓取通常在對齊的邊界上,並且預取緩衝區中存在一個接收這些數據的水印確定何時執行下一個讀取操作,甚至這兩個指令在一個循環中的對齊取決於它們在哪裏可以對執行性能造成嚴重影響,基本上它執行兩個讀取行或每個循環一次,高速緩存在第一遍之後不相關,一個或兩個讀取行仍然可以訪問緩存。

但是,這一切都因建築而異。訪問和緩衝到管道,arm,x86,powerpc等中的Mips都有所不同,並且可能因該體系結構的rev或generation而每隔三年變化一次,規則可能會針對該核心的下一個版本進行更改

ARM和MIPS以及其他基於IP的內核(其中芯片供應商實現內存系統)可以具有相同的核心版本,但是芯片供應商或家族對芯片供應商或家族差異可能/將會影響性能,所以即使您得到了相當關閉在一個芯片上,保持 相同的對準,並且基於芯片供應商/存儲器側的 ,其他核心設置性能可以不同。將dram加入這個公式中,其中內存的性能不是非確定性的,你只是讓它變得更糟。

如果您回到預先流水線化的日子,一次執行一條指令,這是非常可預測的,常用的定時循環是使用較舊的PIC指令集完成的,極其可預測,並且並不少見請參閱使用定時循環而不是定時器。導致許多人嘗試這樣做後,他們在其他架構和體系結構上學習/在該架構上看到它(只是失敗)。

這是一個非常教育性的練習,我建議你試試看。使用定時器作爲參考,並在測試代碼之前和之後使用單個加載指令對其進行理想的取樣。如果你在操作系統上完成所有這些工作,可能會有足夠的噪音,你實際上並沒有看到差異的細節。您將創建其他循環竊取程序,並將其添加到總體計時中,特別是在測試代碼之前和之後獲取時間的呼叫。

0
votes
answers
57 views
+10

廣播接收器報警管理器

1

這是我的拳頭應用程序,我試圖使Alarm managerBroadcastReceiver一起使用。廣播接收器報警管理器

我用我希望Alarm manager觸發onReceive()的時間調用函數「SetFutureStartTime()」。但是當時機到來時,什麼也沒有發生。

這是個代碼:

public void SetFutureStartTime(int startHour, int startMin) 
{ 
    Context context = this; 

    m_alarmMgr = (AlarmManager)getSystemService(Context.ALARM_SERVICE); 
    Intent intent = new Intent(context, AlarmReceiver_SendOn.class); 
    intent.setAction("Broadcast"); 
    m_alarmIntent = PendingIntent.getBroadcast(context, 0, intent, 0); 

    // Set the alarm to start at 21:32 PM 
    Calendar calendar = Calendar.getInstance(); 
    calendar.setTimeInMillis(System.currentTimeMillis()); 
    calendar.set(Calendar.HOUR_OF_DAY, startHour); 
    calendar.set(Calendar.MINUTE, startMin); 

    m_alarmMgr.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), m_alarmIntent); 
} 

public class AlarmReceiver_SendOn extends BroadcastReceiver 
{ 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     SendTcpMessage(TURN_ON_COMMAND); //I put here break point but nothing happens 
    } 
} 

這是manifast末:

..... 
</activity> 
    <receiver android:name=".MainActivity$AlarmReceiver_SendOn"> 
     <intent-filter> 
      <action android:name="Broadcast"> 
      </action> 
     </intent-filter> 
    </receiver> 
</application> 

我缺少什麼?

+0

是'AlarmReceiver_SendOn'一個內部類的'MainActivity'的,就像清單中顯示的那樣? –

+0

嗨,是的......它在'MainActivity'裏面。 – user1673206

+0

如果你想讓Receiver類成爲一個嵌套類,它必須是'public static'。 –

沙发
0
1

此代碼的工作對我來說: 這個MainActivity

public class MainActivity extends AppCompatActivity { 

    private AlarmManager m_alarmMgr; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
      SetFutureStartTime(19, 25); 
    } 

    public void SetFutureStartTime(int startHour, int startMin) 
    { 
     Context context = this; 

     m_alarmMgr = (AlarmManager)getSystemService(Context.ALARM_SERVICE); 
     Intent intent = new Intent(context, com.asb.test.testapplication.AlarmReceiver_SendOn.class); 
     PendingIntent m_alarmIntent = PendingIntent.getBroadcast(context, (int) System.currentTimeMillis(), intent, 0); 

     // Set the alarm to start at 21:32 PM 
     Calendar calendar = Calendar.getInstance(); 
     calendar.setTimeInMillis(System.currentTimeMillis()); 
     calendar.set(Calendar.HOUR_OF_DAY, startHour); 
     calendar.set(Calendar.MINUTE, startMin); 

     m_alarmMgr.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), m_alarmIntent); 
    } 

} 

這是AlarmReceiver_SendOn

public class AlarmReceiver_SendOn extends BroadcastReceiver 
    { 
     @Override 
     public void onReceive(Context context, Intent intent) { 

      Log.i("TAG", "Started >>>>>>>"); 
      //and doing something 

     } 
    } 

這AndroidManifest

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.asb.test.testapplication"> 
    <uses-permission android:name="com.android.alarm.permission.SET_ALARM"/> 
    <uses-permission android:name="android.permission.WAKE_LOCK"/> 
    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:roundIcon="@mipmap/ic_launcher_round" 
     android:supportsRtl="true" 
     android:theme="@style/AppTheme"> 
     <activity android:name=".MainActivity"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 

     <receiver android:name=".AlarmReceiver_SendOn"> 
     </receiver> 

    </application> 
</manifest> 
0
votes
answers
65 views
+10

Pycharm控制檯:show()不工作

0

我使用pycharm作爲python開發的IDE,我注意到了集成的python控制檯令人討厭的問題。我使用PyQt作爲一些GUI編程的支柱,當我製作一個窗口時,雖然我使用show()函數,但它並沒有顯示在屏幕上。下面是一個例子代碼:Pycharm控制檯:show()不工作

import sys 
from PyQt4 import QtGui 
from threading import Thread 

app = QtGui.QApplication(sys.argv) 
w = QtGui.QWidget() 
w.setGeometry(100, 100, 200, 50) 
w.show() 

當然,如果我運行本地Python環境中相同的代碼窗口中顯示()命令後立即顯示出來。

我要補充一點,我有同樣的問題在同一個控制檯matplotlib的數字和下面的代碼幫助:

plt.show(block=False) 

這是Pycharm控制檯或方法的普遍問題它啓動了Python控制檯?並可以有人請推薦一個解決方案?

這裏是我的操作系統和IDE的一些細節: OS:Debian的傑西 的Python:Python的3.4 PyQt的:PyQt4的 Pycharm 2017年1月4日

沙发
0
0

我不是專家,但你的代碼不能用於工作我只是快速地閃過窗戶。我在Windows 10,python 3.6和pyqt5上。但是,如果我之後使用app.exec_()啓動事件循環,它會保持不變。

編輯:我想我理解手頭的問題。首先,交互式解釋器(如Windows上的IDLE和本地控制檯)和Pycharm文件編輯器(運行在控制檯中創建的腳本)之間存在差異。

在IDLE中,您可以在沒有事件循環的情況下顯示和使用代碼,它的工作原理的確切具體原因有點超出我的意思,但似乎還有一個事件循環(至少是某種類型),因爲一切都按照人們的期望工作。與PyCharm相比,這是一個很大的區別!

在PyCharm中,您只編輯一個python文件,您可以在控制檯中運行該文件。這意味着,唯一能夠運行的是該文件中的內容,然後退出。當它退出時,所有東西都會被垃圾收集並關閉,而不是等待您的輸入。 (因爲除非你使用類似input()這樣的代碼,代碼不會等待任何東西,並且它將會結束。)這就是爲什麼你通常使用事件循環,必須等待用戶完成使用GUI應用程序的代碼,然後在用戶完成時停止。 (例如,關閉GUI。)最重要的是,當你運行一個python文件時,你不能編寫更多的代碼,並且當你到達最後時它會一直結束。所以,只要你的窗口,它將被關閉,因爲代碼完成並退出。因此,在啓動事件循環之前必須完成所有事情,然後在做其他事情之前關閉它,除非在GUI中使用按鈕觸發某些事情,或者並行運行一個線程來修復某些內容。

爲了與matplotlib進行比較,您遇到了同樣的問題。在matplotlib中,代碼等待用戶在繼續下一段代碼之前關閉圖形窗口。除非你做了像show(block=False)這樣的東西,它會在另一個線程或其他類似的東西中產生圖形,這就繞開了這一點。 (據我所知,PyQt不支持在一個線程中,儘管你可以在另一個線程中運行其他代碼段,但GUI需要在主線程上,因爲顯然有些時髦事情會發生。我不完全確定這一點,因爲PyQt自帶了QThread,但是我不知道它在GUI上的侷限性。)

這是一個很長的答案,它是有道理的,問我我會盡力澄清。

+0

你是否直接在python中嘗試它?對我來說,它可以在本地python中正常工作,但不在PyCharm控制檯中。 –

+0

測試了python文件和PyCharm。我不知道如何根據操作系統的差異來填寫它,但是您是否嘗試添加事件循環?否則,您不能與GUI進行交互,除非您將其作爲自己運行的進程拋出。 – Thomasedv

+0

使用事件循環可能意味着以下命令: 'app.exec _()' –

0
votes
answers
38 views
+10

參數傳遞到Azure的ARM模板

0

我有我使用部署到哪藉此參數資源組的模板:參數傳遞到Azure的ARM模板

"envPrefixName": { 
    "type": "string", 
    "metadata": { 
    "description": "Prefix for the environment (2-5 characters)" 
    }, 
    "defaultValue": "cust1", 
    "minLength": 2, 
    "maxLength": 5 
}, 

我想使這個參數可以被覆蓋時的值cdmlet被稱爲像這樣:

$AzureParams = @{ 
     ResourceGroupName = $ResourceGroup 
     TemplateUri = $TemplateUri 
     TemplateParameterUri = $TemplateParamUri 
     Mode = "Complete" 
     envPrefixName = "sunlb" #Override default parameter value 
     Force = $true 
    } 

    New-AzureRmResourceGroupDeployment @AzureParams 

我試過這種方法,但該解決方案將繼續嘗試使用模板設置的值,而不是通過一個在我調用的參數傳遞。

編輯:這可能是TemplateParameterUri文件導致和問題?

沙发
0
1

如果您提供TemplateParameterUri,它將使用參數文件來部署模板(並從文件中獲取值),並且您的envPrefixName會因爲不會評估模板中的參數而「丟失」。

TemplateParameterUri和您預期的那樣(但你必須在這種情況下提供的所有參數,除非他們有默認值)

+0

好吧,我在想,可能是因爲它會奏效。這是一個問題,如果你想通過param文件提供一些參數,但有些東西需要更加動態。這是一個不合理的用例嗎? – Batman

+1

在模板中提供了默認值,而不是在參數文件中(你甚至可以這樣做)。另一個選項 - 在部署前用powershell編輯參數文件 – 4c74356b41

+0

聽起來不錯,謝謝你的快速幫助。 – Batman

0
votes
answers
45 views
+10

Can Ansible可以觀察Azure中的新目標機器嗎?

0

我自動部署Azure資源組和虛擬機。我希望有一個Ansible Controller能夠識別何時創建新虛擬機,以便它可以在其上運行劇本併爲我配置它們。Can Ansible可以觀察Azure中的新目標機器嗎?

我怎麼Ansible認識到在Azure中

沙发
0
1

沒有創建新虛擬機,Ansible對自己不能做到這一點。

Ansible是一個無代理工具,只有當您(或某個其他外部系統)提出要求時纔會執行該工作。

你有一些選擇:

  • 設置一些監控系統,該系統將監視新虛擬機,並引發Ansible劇本運行
  • 建立一些雲事件(不知道是否有任何Azure中,像CloudWatch的活動在AWS)將觸發Ansible工作
  • 設置動態庫存爲您的劇本(這將列出所有的虛擬機配置和新的),並用cron作業運行劇本
  • 設置ansible-pull您的雲計算虛擬機映像中,所以它拉重在虛擬機啓動和自動提供機器上需要劇本冊
+0

有趣,謝謝。 – 4c74356b41

0
votes
answers
61 views
+10

設備農場 - 如何通過appium python訪問額外的數據

0

我想運行需要設備農場與Appium Python的外部數據的unittests。我將數據以zip文件的形式上傳到'額外數據'參數中,並將「/sdcard/」輸入到'android'參數中。我試圖在這裏使用「/WordCountTest1MB」來調用python腳本中的文件。請注意,文件沒有擴展名,它們只是文本。然而,我所有的測試都沒有說:設備農場 - 如何通過appium python訪問額外的數據

test_paramec_0__sdcard_WordCountTest1MB failed: IOError: No such file or directory: '/sdcard/WordCountTest1MB' 

我還需要做些什麼來訪問這些文件嗎?

任何幫助非常感謝!

編輯:這裏是下面發佈的代碼,請注意,我們正試圖在額外的數據參數中查找數據的位置,但是這些目錄的名稱會隨着每個目錄而改變,所以我們需要最初查找需要的文件中的至少一個:

import unittest2 
from appium import webdriver 
from parameterized import parameterized 
import os 

for dirpath, dirnames, filenames in os.walk("."): 
    for filename in [f for f in filenames if f.startswith("WordCountTest10MB.txt")]: 
     dir_name = os.path.join(dirpath, filename) 

print os.path.dirname(dir_name) 


def Test1(rootDir): 
    list_dirs = os.walk(rootDir) 
    for root, dirs, files in list_dirs: 
     for d in dirs: 
      print os.path.join(root, d) 
     for f in files: 
      print os.path.join(root, f) 

# Returns abs path relative to this file and not cwd 
PATH = lambda p: os.path.abspath(
    os.path.join(os.path.dirname(__file__), p) 
) 

def wordcount(filename): 
    for j in range(1, 10): 
     wordcount = {} 
     inFile = filename 
     with open(os.path.abspath(inFile)) as file: # with can auto close the file 
      for word in file.read().split(): 
       if word not in wordcount: 
        wordcount[word] = 1 
       else: 
        wordcount[word] += 1 
     wordcount = sorted(wordcount.items(), key=lambda x: x[1], reverse=True) 
     for k, v in wordcount: 
      print(k, v) 

class WordCountTest(unittest2.TestCase): 

    known_files = {'/WordCountTest1MB.txt', 
        '/WordCountTest5MB.txt', 
        '/WordCountTest10MB.txt'} 

    def SetUpClass(self): 
     desired_caps = {} 
     desired_caps['platformName'] = 'Android' 
     desired_caps['platformVersion'] = '5.0' 
     desired_caps['deviceName'] = 'Android Emulator' 
     desired_caps['app'] = PATH('../../../apps/Nothing_v0_apkpure.com.apk') 
     self.driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps) 

    @parameterized.expand(known_files) 

    def test_paramec(self, filename): 
     os.chdir(dir_name) 
     print os.getcwd(), Test1(os.getcwd()) 
     wordcount(filename) 

    def TearDown(self): 
     self.driver.quit() 

if __name__ == '__main__': 
    unittest2.main() 
沙发
0
0

貌似這裏還有一個問題

def wordcount(filename): 
    .... 
    .... 
     with open(os.path.abspath(inFile)) as file: # with can auto close the file 
    .... 

上述說法沒有給文件的正確路徑,就需要解決這個問題,在這裏是通過一系列例子指的是你可以改正你的路徑

fileDir = os.path.dirname(os.path.realpath('__file__')) 
print fileDir 

#For accessing the file in the same folder 
filename = "same.txt" 
readFile(filename) 

#For accessing the file in a folder contained in the current folder 
filename = os.path.join(fileDir, 'Folder1.1/same.txt') 
readFile(filename) 

#For accessing the file in the parent folder of the current folder 
filename = os.path.join(fileDir, '../same.txt') 
readFile(filename) 

#For accessing the file inside a sibling folder. 
filename = os.path.join(fileDir, '../Folder2/same.txt') 
filename = os.path.abspath(os.path.realpath(filename)) 
print filename 
板凳
0
0

兩個選項,你可以嘗試

1)在集合中的每個元素

known_files = {'/sdcard/WordCountTest1MB.txt', 
'/sdcard/WordCountTest5MB.txt', 
'/sdcard/WordCountTest10MB.txt'} 

2)使用COMBIN添加.TXT水珠和的FileInput的通貨膨脹

import fileinput 
from glob import glob 
#This will store all the file names 
fnames = glob('WordCountTest*') 
for line in fileinput.input(fnames): 
    pass # modify your code 
+0

我是否需要在測試運行設置中對'Android'參數進行任何操作。它說:「從SD卡拉文件,如果你想遞歸地拉一個文件夾的內容,使用尾部斜槓。例如/ sdcard /,/ SD卡/文件夾/,/ SD卡/文件」 –

+0

是否有可能,如果你可以粘貼你的代碼在這裏? –

+0

剛剛添加它作爲編輯 –

0
votes
answers
51 views
+10

爲什麼Traefik無法在同一網絡上找到容器?

0

我已經建立了3個節點的Docker Swarm。它們都配置爲羣集的一部分。主節點也是容器的主機。爲什麼Traefik無法在同一網絡上找到容器?

每個節點都有NFS掛載到NFS以存儲集中式數據。

我創建了一個全局的ElasticSearch集羣,因此它可以在所有節點上運行。這被配置爲在Cluser中使用DNS Round Robin(dnsrr)在Docker Swarm中運行。由於dnsrr不允許端口暴露我有監聽在19200請求Nginx上的代理服務器,然後將它們來代理服務elasticsearch端口9200

的Traefik,ElasticSearch代理和ElasticSearch節點都連接到相同的覆蓋網絡稱爲elastic_cluster。網絡是10.0.10.0/24

我配置了Traefik,因此它有一個指定的主機並在端口443上對elasticsearch.homenetwork.local(非真實域)做出了答案(讓我們加密配置),並且應該轉發給Nginx代理。

然而,當我試着打https://elasticsearch.homenetwork.local我在Traefik日誌中收到一個錯誤:

time="2017-12-02T22:50:37Z" level=warning msg="Error forwarding to http://10.0.10.3:19200, err: dial tcp 10.0.10.3:19200: getsockopt: no route to host" 

鑑於Traefik服務是10.0.10.0/24網絡,我不明白爲什麼我得到這個錯誤上。我使用Portainer來跟蹤服務,我可以看到Traefik服務的IP地址爲10.0.10.4

如果我運行交互式會話到Nginx代理服務器,它的IP地址爲10.0.10.7,我可以ping 10.0.10.4沒有問題。

容器都運行Ubuntu。沒有涉及iptables

有沒有人見過這樣的事情?我正在努力解決這裏有什麼問題,所以如果有人有任何建議,我會非常感謝他們。真正煩人的是,這曾經工作。我不記得有什麼改變,但顯然有一些東西。

ElasticSearch服務命令:

docker service create --name elasticsearch  
         --network elastic_cluster  
         --constraint "node.labels.app_role == "elasticsearch"  
         --mode global  
         --endpoint-mode dnsrr  
         docker.elastic.co/elasticsearch/elasticsearch:5.4.2  
         elasticsearch 

ElasticSearch代理服務命令:

docker service create --name elasticsearch_proxy  
         --network elastic_cluster  
         --label traefik.enable=true  
         --label traefik.backend=elasticsearch_proxy  
         --label traefik.port=19200  
         --label traefik.frontend.rule=Host:elasticsearch.home.turtlesystems.co.uk  
         --label traefik.docker.network=elastic_cluster  
         nginx:1.13 

nginx.conf - https://pastebin.com/Q5sXw6aw

Traefik服務命令

docker service create --name reverse_proxy  
         --network elastic_cluster  
         --network traefik-net  
         --constraint "node.role == manager"  
         --publish 80:80  
         --publish 8080:8080  
         --publish 443:443  
         traefik 

traefik.toml - https://pastebin.com/GFPu8MYJ

沙发
0
0

標籤所有這些事實證明,我有網絡問題的原因是因爲一個錯誤的網絡電纜後。

更換後,everythig工作正常。感謝您的所有建議。

板凳
0
0

我想你已經忘了提及你的服務設置

docker service create --name elasticsearch_proxy  
         --label traefik.docker.network=elastic_cluster 
         --label traefik.enable=true 
         --label traefik.port=19200 
         --network elastic_cluster  
         nginx:1.13 
+0

你是對的,我沒有忘記他們。我用我設定的標籤更新了我的問題。謝謝。 –

+0

您的nginx服務不會公開端口19200.您應該在您的命令中添加'--expose 19200' docker service create --name elasticsearch_proxy --network elastic_cluster --label traefik.enable = true - label traefik.backend = elasticsearch_proxy --label traefik.port = 19200 --label traefik.frontend.rule = Host:elasticsearch.home.turtlesystems.co.uk --label traefik.docker.network = elastic_cluster nginx:1.13' –

+0

我對此感到困惑。由於Traefik與NGinx服務位於同一網絡,因此我不需要公開該端口。實際上,這是我想要做的事情之一,因此我的Swarm中沒有大量暴露的端口。我錯過了什麼嗎?我對暴露端口的理解是,可以直接打到服務 - 我試圖在這裏使用Traefik代理它。 –

0
votes
answers
55 views
+10

數據庫連接錯誤

0

我正在tryng在PyCharm我燒瓶項目,以創建一個SQLite數據庫,但我得到這個錯誤 access denied while opening database數據庫連接錯誤

我認爲它的Windows防火牆的問題,但我不知道如何解決它。

謝謝!

沙发
0
0

已解決:我在Windows防火牆中刪除了Pycharm規則,彈出窗口出現,我允許並運行!

0
votes
answers
75 views
+10

如何在Windows Docker羣集上設置外部負載均衡器或代理服務器?

0

我是新來的Docker,需要在不同的域上公開多個容器。我是否需要設置外部負載平衡器或代理?如何在Windows Docker羣集上設置外部負載均衡器或代理服務器?

而且生產設置也必須部署網絡覆蓋或其他任何容器?

任何人都請在Windows Docker Production上清除我這個問題?

沙发
0
1

首先你必須意識到所有這些流行語的含義。

使用泊塢窗羣模式,我們takling約

  • 使用覆蓋網絡
  • 使用服務

然後縮放,服務發現和負載平衡包括和碼頭工人羣處理。

在一臺機器泊塢窗,我們正在談論

  • 使用橋接網絡
  • 使用run命令

我是否需要安裝外部負載平衡器或代理?

最後,您只需要一個外部負載平衡器來處理所有實例。請記住,每個節點(無論是經理還是工作人員都無所謂)可以用作您可以訪問每項服務的入口點。
但是這需要一個反向代理(不管是否是apache,nginx,haproxy ...採取你熟悉的方式)在global模式下配置和重新部署。

+0

感謝Markus,我清楚你的詳細解釋。 – Rajasekar